18-NavigableSet

2020-02-04  本文已影响0人  鹏程1995

类介绍

类定位

NavigableSet类是在SortedSet类的基础上又做了补充。

SortedSet的使用中我们遇到了一些问题:

  1. 求子集合的过程中传入的范围都是左闭右开的,不能定制,太难受
  2. SortedSet虽然能通过last()获得最后一位,但是反向遍历还是存在不方便。只能通过:Collection.reverseOrder()SortedSet的构造函数以原集合为蓝本创建新对象实现。
  3. 在选择范围时如果是负无穷大到某个数这样的区间没法求解。

所以我们在SortedSet的基础上做了完善。

注意:逆序遍历时的时间开销一般要比顺序遍历的时间开销大

类继承关系分析

我们直接上idea的类关系图吧:

1.png

NavigableSet直接继承SortedSet,在SortedSet的基础上增加了一些新方法。

类使用方法

在实现SortedSet的基础上再增加对新方法的实现呗。

类注意事项

注意:

  1. NavigableSet中可以有null,但是有时候null会影响判断,你不知道那个元素就是null还是没有了然后返回null所以,能不支持null就不支持null
  2. 这个类的注释中如果支持null可以用contains(null)帮助判断,但是如果按照这个逻辑,在Collection中也可以支持,看了一下,作者还真不太一样哈。

源码介绍

方法介绍

E lower(E e);

返回比e小的。无元素返回null

E floor(E e);

小于等于。没有返回null

E ceiling(E e);

大于等于。没有返回null

E higher(E e);

大于。没有返回null

E pollFirst();

对头(最小的)出队。集合为空返回null

E pollLast();

对尾(最大的)出队。集合为空返回null

Iterator<E> iterator();

NavigableSet<E> descendingSet();

返回一个逆序的,以原数据为蓝本,对结构的修改会互相影响。

Iterator<E> descendingIterator();

逆序的Iterator

NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement,boolean toInclusive);

新增了控制参数,用来控制两边的开闭

NavigableSet<E> headSet(E toElement, boolean inclusive);

新增了控制参数

NavigableSet<E> tailSet(E fromElement, boolean inclusive);

新增了控制参数

上一篇 下一篇

猜你喜欢

热点阅读