掌握 Java NavigableSet 接口:导航、排序与实战示例
Java NavigableSet 接口
本教程通过实例讲解 Java NavigableSet 接口及其方法。
NavigableSet 是 Java 集合框架中提供元素导航功能的接口,属于 SortedSet 的子类型。
实现 NavigableSet 的类
使用 NavigableSet 功能需借助实现该接口的 TreeSet 类。
如何使用 NavigableSet
需导入 java.util.NavigableSet 包,创建方式如下:
// 由 TreeSet 实现的 SortedSet
NavigableSet<String> numbers = new TreeSet<>();
此处创建了名为 numbers 的 TreeSet 类型导航集合。
NavigableSet 方法
NavigableSet 扩展了 SortedSet,因此继承其所有方法。但 headSet()、tailSet() 与 subSet() 在 NavigableSet 中重新定义,功能更强。
headSet(element, booleanValue)
返回指定 element 之前的所有元素。booleanValue 可选,默认 false。若为 true,则包含指定元素本身。
tailSet(element, booleanValue)
返回指定 element 之后的所有元素(含该元素)。booleanValue 可选,默认 true。若为 false,则不包含指定元素。
subSet(e1, bv1, e2, bv2)
返回 e1 与 e2 之间的元素(含 e1)。bv1 默认 true,bv2 默认 false。若 bv1 为 false 则不含 e1;若 bv2 为 true 则含 e2。
导航方法
NavigableSet 提供多种元素导航方法:
- descendingSet() – 反转元素顺序
- descendingIterator() – 返回逆序迭代器
- ceiling() – 返回大于或等于指定元素的最小元素
- floor() – 返回小于或等于指定元素的最大元素
- higher() – 返回严格大于指定元素的最小元素
- lower() – 返回严格小于指定元素的最大元素
- pollFirst() – 获取并移除首元素
- pollLast() – 获取并移除尾元素
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 Number: " + 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 中的实现。
java
- 掌握 C# 接口:定义、实现与实战场景全解析
- 精通 Java 运算符:类型、语法与实战示例
- Java 注释:类型、用法与最佳实践
- 精通 Java if…else:控制流全解析
- 精通 Java super 关键字:高级用法与实战示例
- 精通 Java 接口:概念、实现与最佳实践
- 精通 Java Try-With-Resources:自动资源管理详解
- Java 注解详解:类型、放置位置与实战示例
- 掌握 Java Lambda 表达式:从基础到 Stream API 实战
- Java 接口 vs 抽象类:如何选择合适的抽象方式
- Java 接口全解析:定义契约、默认方法、多实现与标记接口
- Java 9 接口私有方法:增强封装与代码复用