NavigableSet接口源码浅析(基于jdk1.8.0_231)

1. NavigableSet接口简介

  • 根据“实现了啥接口,提供啥服务”原则,若类实现了NavigableSet接口,说明该类可以可以根据给定的搜索目标,返回一个匹配簇,举例通俗不严格地讲,对于一个集合类若实现了NavigableSet接口,他就会提供比给定目*标小的子集合,在给定目标范围内的子集合,比给定目标大的子集合;

2. NavigableSet UML

3. NavigalbleSet 源码

package java.util;

public interface NavigableSet<E> extends SortedSet<E> {    
    // 实现接口API约定:返回集合set中比e小(严格小的,等于不可)的最大的元素,如果没有返回null,如果e是null,会抛出NullPointerException
    // 如果e不能与集合set中的其他元素比较,会抛出ClassCastException
    E lower(E e);
    // 实现接口API约定: 返回集合set中比e小(小于 等于 e都可)的最大的元素,如果没有返回null。如果e是null,会抛出NullPointerException
    // 如果e不能与集合set中的其他元素比较,会抛出ClassCastException
    E floor(E e);
    // 实现接口API约定:返回集合set中比e大的(大于或等于都可)元素中最小的,如果没有,返回null.如果e = null 且 集合set不允许放null元素,会抛出NullPointerException,
    // 如果e不能与集合set中的其他元素比较,会抛出ClassCastException 
    E ceiling(E e);
    // 实现接口API约定:返回集合set中比e大的(严格比e大)元素中最小的,如果没有,返回null.如果e = null 且 集合set不允许放null元素,会抛出NullPointerException,
    // 如果e不能与集合set中的其他元素比较,会抛出ClassCastException 
    E higher(E e);
    // 实现接口API约定:移除第一个元素,返回移除的元素(就是最小的元素),如果集合set为空返回null
    E pollFirst();
    // 实现接口API约定:移除最后一个元素(就是最大的元素),返回移除的元素,如果集合set为空返回null
    E pollLast();
    // 实现接口API约定:返回集合set的升序迭代器(用此迭代器依次访问的元素是升序的)
    Iterator<E> iterator();
    // 实现接口API约定:返回集合set元素的逆序视图(就是按元素降序返回,效果和Collections.reverseOrder方法一样)
    NavigableSet<E> descendingSet();
    // 实现接口API约定:返回集合set的降序迭代器,等价于 descendingSet().iterator()(用此迭代器依次访问的元素是降序的)
    Iterator<E> descendingIterator();
  // 实现接口API约定:返回集合set的子集合视图,如果fromElement = toElement,且在fromInclusive toInclusive至多有一个为true,返回空集合,对子集合视图的改变会直接反映在父集合set上
    // 若对视图操作索引的范围不合法,会抛出IllegalArgumentException(如插入一个元素超过视图的范围啊),若fromElment或toElement为null,且集合set不允许存null,会抛出NullPointerException,若fromElement和toElement 
    // 不可以和set中的元素比较,会抛出ClassCastException
    // fromInclusive = true 表示包含fromElement元素,toInclusive同理
    NavigableSet<E> subSet(E fromElement, boolean fromInclusive,
                           E toElement,   boolean toInclusive);

    // 实现接口API约定: 当inclusive = false时,返回集合中小于toElement的所有元素的视图,当inclusive = true,返回集合中小于或等于toElement的所有元素的视图
    // 对视图结构的修改会直接反映在原集合set上的
    // 若对视图操作索引的范围不合法,会抛出IllegalArgumentException(如插入一个元素超过视图的范围啊),若fromElment或toElement为null,且集合set不允许存null,会抛出NullPointerException,若 
    // fromElement和toElement 
    NavigableSet<E> headSet(E toElement, boolean inclusive);
    // 实现接口API约定: 当inclusive = false时,返回集合中大于toElement的所有元素的视图,当inclusive = true,返回集合中大于或等于toElement的所有元素的视图
    // 对视图结构的修改会直接反映在原集合set上的
    // 若对视图操作索引的范围不合法,会抛出IllegalArgumentException(如插入一个元素超过视图的范围啊),若fromElment或toElement为null,且集合set不允许存null,会抛出NullPointerException,若 
    // fromElement和toElement 
    NavigableSet<E> tailSet(E fromElement, boolean inclusive);

    //  实现接口API约定:等价于subSet(fromElement, true, toElement, false)
    SortedSet<E> subSet(E fromElement, E toElement);
    //  实现接口API约定:等价于headSet(toElement, false)
    SortedSet<E> headSet(E toElement);
    //  实现接口API约定:等价于tailSet(fromElement, true)
    SortedSet<E> tailSet(E fromElement);
}
原文地址:https://www.cnblogs.com/ahpucd/p/13436572.html