Java 数据容器之 NavigableSet(NavigableSet 搜索方法、NavigableSet 移除方法、NavigableSet 获取子集、NavigableSet 其他方法)

一、NavigableSet

  1. NavigableSet 是 Java 集合框架中的一个接口

  2. NavigableSet 继承自 SortedSet,它提供了更强大的导航与搜索功能

  3. NavigableSet 允许按升序或降序遍历元素,并支持查找最接近某个元素的元素

  4. Java 提供了两个主要的实现:TreeSet(基于红黑树,线程不安全)、ConcurrentSkipListSet(基于跳表,线程安全)


二、NavigableSet 搜索方法

1、基本介绍
E lower(E e);
  1. lower 方法:返回 < e 的最大元素
E higher(E e);
  1. 返回 > e 的最小元素
E floor(E e);
  1. floor 方法:返回 ≤ e 的最大元素
E ceiling(E e);
  1. ceiling 方法:返回 ≥ e 的最小元素
2、演示
NavigableSet<Integer> numbers = new TreeSet<>();

numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
numbers.add(50);

System.out.println("Lower than 25: " + numbers.lower(25));
System.out.println("Higher than 25: " + numbers.higher(25));
System.out.println("Floor of 25: " + numbers.floor(25));
System.out.println("Ceiling of 25: " + numbers.ceiling(25));
# 输出结果

Lower than 25: 20
Higher than 25: 30
Floor of 25: 20
Ceiling of 25: 30

三、NavigableSet 移除方法

1、基本介绍
E pollFirst();
  1. pollFirst 方法:移除并返回第一个元素(如果集合为空则返回 null)
E pollLast();
  1. pollLast 方法:移除并返回最后一个元素(如果集合为空则返回 null)
2、演示
NavigableSet<Integer> numbers = new TreeSet<>();

numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
numbers.add(50);

System.out.println("Poll First: " + numbers.pollFirst());
System.out.println("Poll Last: " + numbers.pollLast());
System.out.println("After Poll: " + numbers);
# 输出结果

Poll First: 10
Poll Last: 50
After Poll: [20, 30, 40]
NavigableSet<Integer> numbers = new TreeSet<>();

System.out.println("Poll First: " + numbers.pollFirst());
System.out.println("Poll Last: " + numbers.pollLast());
System.out.println("After Poll: " + numbers);
# 输出结果

Poll First: null
Poll Last: null
After Poll: []

四、NavigableSet 获取子集

1、基本介绍
NavigableSet<E> subSet(E fromElement, boolean fromInclusive,
                       E toElement,   boolean toInclusive);
  1. subSet 方法: 返回 fromElement ~ toElement 范围的子集(可控制是否包含边界)
NavigableSet<E> headSet(E toElement, boolean inclusive);
  1. headSet 方法:返回 < toElement 的子集(可控制是否包含边界)
NavigableSet<E> tailSet(E fromElement, boolean inclusive);
  1. tailSet 方法:返回 > fromElement(可控制是否包含边界)
SortedSet<E> subSet(E fromElement, E toElement);
  1. subSet 方法: 返回 [fromElement, toElement) 范围的子集
SortedSet<E> headSet(E toElement);
  1. headSet 方法:返回 < toElement 的子集
SortedSet<E> tailSet(E fromElement);
  1. tailSet 方法:返回 ≥ fromElement 的子集
2、演示
NavigableSet<Integer> numbers = new TreeSet<>();

numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
numbers.add(50);

NavigableSet<Integer> subSet = numbers.subSet(20, true, 40, false);
System.out.println("SubSet [20, 40): " + subSet);

NavigableSet<Integer> headSetExclusive = numbers.headSet(30, false);
System.out.println("HeadSet (<30): " + headSetExclusive);

NavigableSet<Integer> headSetInclusive = numbers.headSet(30, true);
System.out.println("HeadSet (≤30): " + headSetInclusive);

NavigableSet<Integer> tailSetExclusive = numbers.tailSet(30, false);
System.out.println("TailSet (>30): " + tailSetExclusive);

NavigableSet<Integer> tailSetInclusive = numbers.tailSet(30, true);
System.out.println("TailSet (≥30): " + tailSetInclusive);
# 输出结果

SubSet [20, 40): [20, 30]
HeadSet (<30): [10, 20]
HeadSet (≤30): [10, 20, 30]
TailSet (>30): [40, 50]
TailSet (≥30): [30, 40, 50]
NavigableSet<Integer> numbers = new TreeSet<>();

numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
numbers.add(50);

SortedSet<Integer> subSet = numbers.subSet(20, 40);
System.out.println("SubSet [20, 40): " + subSet);

SortedSet<Integer> headSetExclusive = numbers.headSet(30);
System.out.println("HeadSet (<30): " + headSetExclusive);

SortedSet<Integer> tailSetExclusive = numbers.tailSet(30);
System.out.println("TailSet (≥30): " + tailSetExclusive);
# 输出结果

SubSet [20, 40): [20, 30]
HeadSet (<30): [10, 20]
TailSet (≥30): [30, 40, 50]

五、NavigableSet 其他方法

1、基本介绍
Iterator<E> descendingIterator();
  1. descendingIterator 方法:返回降序迭代器
NavigableSet<E> descendingSet();
  1. descendingSet 方法:返回逆序的 NavigableSet
2、演示
NavigableSet<Integer> numbers = new TreeSet<>();

numbers.add(10);
numbers.add(30);
numbers.add(20);
numbers.add(50);
numbers.add(40);

Iterator<Integer> descendingIterator = numbers.descendingIterator();
while (descendingIterator.hasNext()) {
    System.out.println(descendingIterator.next());
}
# 输出结果

50
40
30
20
10
NavigableSet<Integer> numbers = new TreeSet<>();

numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
numbers.add(50);

NavigableSet<Integer> descendingSet = numbers.descendingSet();

System.out.println(descendingSet);
# 输出结果

[50, 40, 30, 20, 10]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值