跳到主要内容

Java NavigableSet 接口

提示
  1. NavigableSet 接口NavigableSet 是 Java 集合框架中的一个接口,提供了在集合元素间进行导航的特性。它是 SortedSet 接口的子类型。
  2. 实现类NavigableSet 接口的功能通过 TreeSet 类来实现,这使得它能够以排序的方式存储元素并提供额外的导航方法。
  3. 核心功能NavigableSet 提供了多种导航方法,如 ceiling(), floor(), higher(), lower(), pollFirst(), 和 pollLast(),用于找到特定条件的元素或遍历集合。此外,它还拥有修改 SortedSetheadSet(), tailSet(), 和 subSet() 方法的功能。

Java 集合框架的 NavigableSet 接口提供了在集合元素间导航的特性。

它被认为是 SortedSet 的一种类型。

实现 NavigableSet 的类

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

TreeSet 类实现了 NavigableSet 接口。

如何使用 NavigableSet?

在 Java 中,我们必须导入 java.util.NavigableSet 包来使用 NavigableSet。一旦我们导入了包,下面是我们可以创建可导航集合的方式。

// 通过 TreeSet 类实现的 SortedSet
NavigableSet<String> numbers = new TreeSet<>();

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

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 传递,该方法返回不包括 e1e1e2 之间的所有元素。

如果 true 被作为 bv2 传递,该方法返回包括 e1e1e2 之间的所有元素。

导航方法

NavigableSet 提供了各种可以用来遍历其元素的方法。

  • descendingSet() - 反转集合中元素的顺序

  • descendingIterator() - 返回一个迭代器,可用于以相反顺序遍历集合

  • ceiling() - 返回所有大于或等于指定元素的元素中最小的一个

  • floor() - 返回所有小于或等于指定元素的元素中最大的一个

  • higher() - 返回所有大于指定元素的元素中最小的一个

  • lower() - 返回所有小于指定元素的元素中最大的一个

  • pollFirst() - 返回并移除集合中的第一个元素

  • pollLast() - 返回并移除集合中的最后一个元素

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

在 TreeSet 类中实现 NavigableSet

import java.util.NavigableSet;
import java.util.TreeSet;

class Main {

public static void main(String[] args) {
// 使用 TreeSet 创建 NavigableSet
NavigableSet<Integer> numbers = new TreeSet<>();

// 向集合中添加元素
numbers.add(1);
numbers.add(2);
numbers.add(3);
System.out.println("NavigableSet: " + numbers);

// 访问第一个元素
int firstElement = numbers.first();
System.out.println("First Element: " + firstElement);

// 访问最后一个元素
int lastElement = numbers.last();
System.out.println("Last Element: " + lastElement);

// 移除第一个元素
int number1 = numbers.pollFirst();
System.out.println("Removed First Element: " + number1);

// 移除最后一个元素
int number2 = numbers.pollLast();
System.out.println("Removed Last Element: " + number2);

}
}

输出

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

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

现在我们已经了解了 NavigableSet 接口,接下来我们将学习如何使用 TreeSet 类来实现它。