1. 程式人生 > 實用技巧 >NavigableSet介面原始碼淺析(基於jdk1.8.0_231)

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);
}