【JDK1.8源碼剖析】Collection接口

Collection源碼剖析

(一)簡介

Collection接口是集合層次結構中的根接口。

(1)下面是常用集合類關係圖

Collection
  |___List  有序,可重複
    |___ArrayList  
    |___LinkedList 
    |___Vector  
  |___Set  無序,不可重複
    |___HashSet
    |___TreeSet

JDK不提供此接口的任何直接實現:它提供了更具體的子接口(如Set和List)的實現。

(2)Collection的繼承體系
在這裏插入圖片描述

關於Iterable的源碼剖析,我們已經進行過了【JDK1.8源碼剖析】內部迭代器 Iterable接口,它使得實現類能夠使用forEach方法進行遍歷。

(二)源碼分析

考慮到是接口,除了默認方法沒有具體的實現,我們首先看看它有哪些東西:
在這裏插入圖片描述

int size():返回此集合中的元素數量
boolean isEmpty():判斷集合元素是否爲空
boolean contains(Object o):判斷此集合是否包含指定的元素,包含則返回true,反之
Iterator<E> iterator():返回此集合中元素的迭代器,不保證元素返回的順序(除非此集合是提供保證的某個類的實例)。
Object[] toArray():將此集合中的元素轉換成數組並返回該數組,該方法作爲基於數組和集合之間的橋樑的api
<T> T[] toArray(T[] a):返回指定類型數組
boolean add(E e):此集合添加指定元素
boolean remove(Object o):刪除指定元素
boolean containsAll(Collection<?> c):判斷是否包含特定集合,如果存在則返回true 反之
boolean addAll(Collection<? extends E> c):添加指定集合
boolean removeAll(Collection<?> c):刪除指定集合
default boolean removeIf(Predicate<? super E> filter):移除此集合中滿足給定條件的所有元素
boolean retainAll(Collection<?> c):僅保留指定類型的集合
void clear():清空集合元素
boolean equals(Object o):將指定的對象與此集合進行相等性較
int hashCode():返回集合的哈希值,用於比較相等與否
default Spliterator<E> spliterator():繼承自Iterable,內部迭代器還可轉換爲可分割迭代器Spliterator

依次看一下默認方法:移除此集合中滿足給定條件的所有元素

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

Predicate<T> 爲斷定型函數式接口,確定類型爲T的對象是否滿足某約束,並返回boolean 值。

Lambda表達式參考這篇文章【Java 8 in Action】Lambda表達式,非常詳盡且有實戰。

同樣,我們在【Java 8 in Action】Stream中探討了Stream的創建,其中一條就是 通過集合的stream()方法或者parallelStream()。

spliterator()的使用參考:

JAVA8流中Spliterator的使用(一)

JAVA8 stream 中Spliterator的使用(二)

    default Stream<E> stream() {
        return StreamSupport.stream(spliterator(), false);
    }
    default Stream<E> parallelStream() {
        return StreamSupport.stream(spliterator(), true);
    }
發佈了194 篇原創文章 · 獲贊 3472 · 訪問量 53萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章