在分析Java的List集合的時候要先分析一下他們的公共接口Collection摔蓝,這里我通過源碼加上Java1.8 的幫助文檔來分析渣聚。
Collection繼承了Iterable,Iterable在這里做一下簡單的分析:
Iterable是java.lang包里面的一個接口是個頂級接口蔬蕊,不再繼承或?qū)崿F(xiàn)其它的類结澄,在Java1.8的官方文檔里面這樣介紹到這個接口-實現(xiàn)這個接口就允許一個對象實現(xiàn)了“for-each loop”的功能,這個功能從1.5開始岸夯。
里面有三個方法:
返回一個Iterator元素類型是泛型
Iterator<T> iterator();
迭代器對每個元素執(zhí)行規(guī)定的方法直到所有給定的元素已經(jīng)執(zhí)行完畢麻献,或者拋出異常
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
這個方法還在研究中,官方文檔給出的介紹是根據(jù)Iterable的描述在元素里面生成一個Spliterator猜扮,目前還不知道這個類是干嘛用的
default Spliterator<T> spliterator() {
return Spliterators.spliteratorUnknownSize(iterator(), 0);
}
Collection僅僅只實現(xiàn)了Iterable這一個接口勉吻,下面就可以看看這個接口里面的方法
這個方法是返回collection集合里面元素的個數(shù),如果元素的個數(shù)大于Integer的最大數(shù)旅赢,則返回Integer的最大數(shù)(看了一下Integer的最大值是2的31次方-1齿桃,最小值是-2的31次方)
int size();
這個方法就是判斷collection集合是不是為空
boolean isEmpty();
如果集合里面包含傳入的Obejct對象,則返回true煮盼,會拋出兩個異常短纵,一種是空指針異常,一種是
boolean contains(Object o);類不相容異常
在集合中返回一個Iterator
Iterator<E> iterator();
返回一個數(shù)組包含集合里面的所有元素僵控。如果集合保證了元素的順序香到,那么這個數(shù)組也要保證元素的順序。這個方法是數(shù)組和集合之間的橋梁
Object[] toArray();
返回一個數(shù)組包含集合里面的所有元素。但是數(shù)組的返回值是特定的养渴,如果元素的類型跟規(guī)定的類型相符,直接返回泛烙,否則一個新的數(shù)組返回里面是規(guī)定的類型
<T> T[] toArray(T[] a);
確保這個集合包含這個特殊的元素理卑,如果此集合因調(diào)用而更改則返回true,如果此集合不允許重復(fù)并且已經(jīng)包含指定元素則返回false
boolean add(E e);
如果存在該Object的話蔽氨,從集合中移除該指定元素的單個實例藐唠。如果這個集合包含指定元素則返回true
boolean remove(Object o);
如果當(dāng)前集合包含所有傳入的集合的元素,則返回true
boolean containsAll(Collection<?> c);
將指定的集合中的所有元素添加到當(dāng)前集合中
boolean addAll(Collection<? extends E> c);
從當(dāng)前集合中移除所有指定的集合中的元素
boolean removeAll(Collection<?> c);
移除滿足給定條件的集合的所有元素
default boolean removeIf(Predicate<? super E> filter)
只保留元素包含在指定集合中的元素
boolean retainAll(Collection<?> c);
移除所有集合中的元素鹉究,這個方法執(zhí)行以后集合就為空了
void clear();
將指定的元素跟跟集合中中元素做對比宇立,返回true表示相等
boolean equals(Object o);
返回一個hash值,這個接口沒有實現(xiàn)這個方法自赔。我們應(yīng)該注意任何重寫Object.equals方法也必須重寫object.hashcode
int hashCode();
創(chuàng)建此集合中的元素的spliterator
@Override
default Spliterator<E> spliterator()
返回一個連續(xù)的的Stream對象
default Stream<E> stream()
返回一個可能的并行流妈嘹,這個集合作為其源。這種方法允許返回一個順序流绍妨。
default Stream<E> parallelStream()