Java基礎之Collections框架及其源碼分析Collections接口

Java基礎之Collections框架及其源碼分析


集合有時候稱爲容器,是將多個元素組合成一個單元的簡單對象。集合用於存儲、檢索、操作和通信聚合數據。

Collections接口層級

在這裏插入圖片描述
Collections集合接口封裝了不同類型的集合,這些接口允許對集合的操作獨立於它們表示的細節。Collections集合接口是Java集合框架的基礎。
如上圖所示有很多子接口:
Set: 使用過set集合的應該大概瞭解了set的使用。set是不能包含重複元素的集合,
SortedSet:只是Set是有序形式。
List:有序集合(有時稱爲序列)。列表可以包含重複的元素。列表的用戶通常可以精確地控制每個元素在列表中的位置,並且可以通過元素的整數索引(位置)訪問元素。
Queue:隊列,使用先進先出的原則(FIFO)。
Deque:雙向隊列,Deques可以作爲先進先出(FIFO)和後進先出(LIFO)兩種形式使用。在deque中,可以在兩端插入、檢索和刪除所有新元素。
Map:以key-value映射元素,不能包括相同的Key,一個key最多隻能關聯一個值。
SortedMap:只是Map是有序形式。

申明Collections

public interface Collection…定義一個Collection接口。

源碼

Collection繼承了Iterable接口,實現迭代器接口。

public interface Collection<E> extends Iterable<E> {
    /**
     返回集合中元素個數 ,如果集合中的元素大於Integer.MAX_VALUE,將返回Integer.MAX_VALUE
     */
    int size();

    /**
     * 返回集合是否爲空
     */
    boolean isEmpty();

    /**
     *返回集合中是否包含指定元素
     */
    boolean contains(Object o);

    /**
    返回此集合中元素的迭代器
     */
    Iterator<E> iterator();

    /**
     * 返回一個數組包含集合中的所有元素
    如果這個集合保證了迭代器返回元素的順序,那麼這個方法必須以相同的順序返回元素
     *
     */
    Object[] toArray();

    /**
     * 指定相關類型的包含集合中所有元素的數組(指定類型)
     */
    <T> T[] toArray(T[] a);
    /**
     * 確保此集合包含指定的元素,添加元素,如果操作成功,將返回true,否則返回true,如果限制集合元素不能重複,添加相同的元素將返回false
     */
    boolean add(E e);

    /**
     * 移除集合中指定的元素返回操作的結果
     */
    boolean remove(Object o);

    /**
     *判斷集合中是否包含指定集合中的所有元素
     */
    boolean containsAll(Collection<?> c);

    /**
     * 添加指定集合中所有元素到當前的集合中
     */
    boolean addAll(Collection<? extends E> c);

    /**
     * 當前集合中刪除指定集合中所有的元素
     */
    boolean removeAll(Collection<?> c);

    /**
    	JDK 1.8支持lambda表達式
    	當前集合中刪除指定集合中所有的元素,如果出現異常,交給Predicate處理
     */
    default boolean removeIf(Predicate<? super E> filter) {
        Objects.requireNonNull(filter);
        boolean removed = false;
        final Iterator<E> each = iterator();
        while (each.hasNext()) {
            if (filter.test(each.next())) {
                each.remove();
                removed = true;
            }
        }
        return removed;
    }

    /**
     *僅保留此集合中指定集合中包含的元素(可選操作)
     */
    boolean retainAll(Collection<?> c);

    /**
    移除集合中所有的元素
     */
    void clear();

    /**
     * 比較指定的對象與此集合是否相等.
     */
    boolean equals(Object o);

    /**
     * 返回集合的hashCode值. 
     */
    int hashCode();

    /**
    	JDK1.8之後版本使用,default也是1.8使用,接口默認方法
     *  在此集合的元素上創建一個Spliterator
     */
    @Override
    default Spliterator<E> spliterator() {
        return Spliterators.spliterator(this, 0);
    }

    /**
    JDK1.8之後版本使用,default也是1.8使用,接口默認方法
     *返回一個順序的Stream,將此集合作爲其源
     */
    default Stream<E> stream() {
        return StreamSupport.stream(spliterator(), false);
    }

    /**
    JDK1.8之後版本使用,使用並行流處理集合,包括filter,group等操作,,default也是1.8使用,接口默認方法
     *返回一個可能是並行的Stream,將此集合作爲其源。此方法允許返回順序流。
     */
    default Stream<E> parallelStream() {
        return StreamSupport.stream(spliterator(), true);
    }
}

看到Collections集合頂層的接口,裏面的相關方法,我們知道List,Set等子集合接口裏面的方法形式。並且瞭解了我們使用lambda進行操作List的時候相關實現所使用的方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章