Sorted & Navigable

Collection 系列文章的总目录:

SortedSet/SortedMap

Map 的 key 就是一个 Set,所以 Java 中几乎所有的 Set 都是使用对应的 Map 实现的。

TreeSet -> NavigableSet -> SortedSet

所以 TreeSet 是 SortedSet 的一个实现。(另一个是 ConcurrentSkipListSet)

public interface SortedSet<E> extends Set<E> {
    // 返回使用的comparator,如果使用自然排序(compareTo),则返回null
    Comparator<? super E> comparator();
    
	// 返回该set中元素范围从fromElement(包括)到toElement(不包括)的部分的视图。
    // 任何对返回的set的操作都会改变原来的set,反之亦然
    // 如果fromElement和toElement相等,则返回一个空的set
    SortedSet<E> subSet(E fromElement, E toElement);

    // 返回小于toElement的部分的视图
    SortedSet<E> headSet(E toElement);

    // 返回大于或等于fromElement的那部分的视图。
    SortedSet<E> tailSet(E fromElement);

    // 返回第一个(最小的)元素。
    E first();

    // 返回最后一个(最大的)元素。
    E last();

    default Spliterator<E> spliterator(){}
}

注意:SortedSet 内部只用 compareTo/comparator 进行比较排序,所以对于传入的 element,也是使用 compareTo/comparator 来进行范围查找,即可以传一个不本身不在 set 内部的 element,只需要可以使用 compareTo/comparator 即可。

public interface NavigableSet<E> extends SortedSet<E> {
    // 返回小于e的最大元素,如果没有,则返回null。
	E lower(E e);
    
    // 返回小于或等于e的最大元素,如果没有,则返回null。
    E floor(E e);
    
    // 返回大于或等于e的最小元素,如果没有,则返回null。
    E ceiling(E e);
    
    // 返回大于e的最小元素,如果没有,则返回null。
    E higher(E e);
    
    // 检索并删除第一个(最小的)元素,如果set为空,则返回null。
    E pollFirst();
    
    // 检索并删除最后一个(最大的)元素,如果set为空,则返回null。
    E pollLast();
    
    Iterator<E> iterator();
    
    // 返回降序的set的视图
    NavigableSet<E> descendingSet();
    Iterator<E> descendingIterator();
    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);
    
    SortedSet<E> subSet(E fromElement, E toElement);
    SortedSet<E> headSet(E toElement);
    SortedSet<E> tailSet(E fromElement);
}

注意:NavigableSet 内部也是只用 compareTo/comparator 进行比较排序。

可以看到,NavigableSet 继承了 SortedSet,增加了单个元素的范围查找、降序set,以及增强的获取的部分set方法。

posted @ 2020-03-30 00:35  demo杰  阅读(167)  评论(0编辑  收藏  举报