原文: https://www.programiz.com/java-programming/navigableset

在本教程中,我们将通过一个示例来学习 Java NavigableSet接口及其方法。

Java 集合框架的NavigableSet接口提供了在设置的元素之间导航的功能。

它被视为 SortedSet 的类型。


实现NavigableSet的类

为了使用NavigableSet接口的功能,我们需要使用实现NavigableSetTreeSet类。

Java `NavigableSet`接口 - 图1


如何使用NavigableSet

在 Java 中,我们必须导入java.util.NavigableSet包才能使用NavigableSet。 导入包后,将按照以下方法创建可导航集。

  1. // SortedSet implementation by TreeSet class
  2. NavigableSet<String> numbers = new TreeSet<>();

在这里,我们创建了一个名为TreeSet类的number的可导航集合。


NavigableSet的方法

NavigableSet被认为是SortedSet的一种。 这是因为NavigableSet扩展了SortedSet接口。

因此,所有SortedSet方法在NavigableSet中也可用。 要了解这些方法的方式,请访问 Java SortedSet

但是,SortedSet中的某些方法(headSet()tailSet()subSet())在NavigableSet中定义不同。

让我们看看如何在NavigableSet中定义这些方法。


headSet(element, booleanValue)

headSet()方法返回指定element(作为参数传递)之前的可导航集合的所有元素。

booleanValue参数是可选的。 其默认值为false

如果true作为booleanValue传递,则该方法返回指定元素之前的所有元素,包括指定元素。


tailSet(element, booleanValue)

tailSet()方法返回包含指定元素的指定element(作为参数传递)之后的可导航集合的所有元素。

booleanValue参数是可选的。 其默认值为true

如果将false作为booleanValue传递,则该方法返回指定元素之后的所有元素,但不包括指定元素。


subSet(e1, bv1, e2, bv2)

subSet()方法返回e1e2之间的所有元素,包括e1

bv1bv2是可选参数。bv1的默认值为truebv2的默认值为false

如果false作为bv1传递,则该方法返回e1e2之间的所有元素,但不包括e1

如果true作为bv2传递,则该方法返回e1e2之间的所有元素,包括e1


用于导航的方法

NavigableSet提供了可用于导航其元素的各种方法。

  • endingSet() - 反转集合中元素的顺序
  • DescendingIterator() - 返回可用于以相反顺序迭代集合的迭代器
  • ceiling() - 返回大于或等于指定元素的那些元素中的最低元素
  • floor() - 返回小于或等于指定元素的那些元素中最大的元素
  • upper() - 返回大于指定元素的那些元素中的最低元素
  • lower() - 返回小于指定元素的那些元素中最大的元素
  • pollFirst() - 返回并从集合中删除第一个元素
  • pollLast() - 返回并从集合中删除最后一个元素

要了解有关NavigableSet的更多信息,请访问 Java NavigableSet(Java 官方文档)


TreeSet类中NavigableSet的实现

  1. import java.util.NavigableSet;
  2. import java.util.TreeSet;
  3. class Main {
  4. public static void main(String[] args) {
  5. // Creating NavigableSet using the TreeSet
  6. NavigableSet<Integer> numbers = new TreeSet<>();
  7. // Insert elements to the set
  8. numbers.add(1);
  9. numbers.add(2);
  10. numbers.add(3);
  11. System.out.println("NavigableSet: " + numbers);
  12. // Access the first element
  13. int firstElement = numbers.first();
  14. System.out.println("First Number: " + firstElement);
  15. // Access the last element
  16. int lastElement = numbers.last();
  17. System.out.println("Last Element: " + lastElement);
  18. // Remove the first element
  19. int number1 = numbers.pollFirst();
  20. System.out.println("Removed First Element: " + number1);
  21. // Remove the last element
  22. int number2 = numbers.pollLast();
  23. System.out.println("Removed Last Element: " + number2);
  24. }
  25. }

输出

  1. NavigableSet: [1, 2, 3]
  2. First Element: 1
  3. Last Element: 3
  4. Removed First Element: 1
  5. Removed Last Element: 3

要了解有关TreeSet的更多信息,请访问 Java TreeSet


现在我们知道了NavigableSet接口,我们将使用TreeSet类学习其实现。