Java集合類源碼學習- Iterabel,Colection,AbstractCollection

Collection<E>接口extends Iteratable<E>接口。數組

Iteratable<T>:實現接口使得對象可以成爲「for-each loop」的目標,T是指iterator返回的元素類型函數

  操做: Iterator<T> iterator() 返回type T的元素的迭代器。oop

      forEach(Cosumer<> superT> action) default意味着沒有任何訪問修飾符的意思。這個動做提供給出每一個元素的操做。spa

      Spliterator<T> spliterator()創造一個由Iterable描述的元素的spliteratorcode

Collection<E>對象

  操做:接口

     基本操做:rem

          元素數量size();hash

          空判斷isEmpty(); it

          移除元素:(1)刪除特定元素(2)刪除特定集合的元素(3)按條件刪除(4)保留特定集合內的元素,其他所有刪除(5)刪除全部元素。  

            remove(Object o);removeAll(Collection<?> c);removeIf(Predicate<? super E> filter);retainAll(Collection<?> c);clear(); 

          添加元素 add(E e); addAll(Collection<? extends E> c)

          包含判斷:(1)單個元素判斷,(2)集合判斷 contains(Object o);containsAll(Collection<?> c);  ?類型通配符

 

            集合的相等判斷,須要集合hashcode值。

            equals(Object o);hashCode();返回集合類的hashcode,重寫equal函數則必須重寫hashcode函數。

     特殊操做:

        轉換爲數組。Object[] toArray() 返回一個包含全部元素的數組。<T> T[] toArray(T[] a);參數爲要轉換以後的數組要放置的容器。返回數組的運行時類型與指定數組的運行時類型相同。如  果指定的數組能容納該 collection,則返回包含此 collection 元素的數組。不然,將根據指定數組的運行時類型和此 collection 的大小分配一個新數組。 

              Stream<E> stream(); Stream<E> parallelStream()

AbstractCollection<E>   受保護的構造器

實現的接口中的函數:    

    contains(Object o):集合中能夠添加空元素,當Object爲null,必須在集合中找到爲Null的元素。雖然null能夠做爲集合中的元素,可是對象比較時用的是equal函數,而Null對象不能直接調用equal函數,因此必須單獨判斷。

    removeAll(Collection<?> c), retainAll(Collection<?> c); remove(Object o); containsAll(Collection<?> c);addAll(Collection<? extends E> c);clear()

新添加的函數:

    Object[] toArray() 將對象返回爲Object類的數組。這裏考慮了集合的size可能與容器自己的個數不一樣。collection的元素比size算出的要小則建立新的數組,若比size大,則從新申請一個數組,而且複製r中的元素,而後賦值給r。

    T[] toArray(T[] A)(<T>表示這個方法是一個泛型方法,其中泛型參數名爲T。)這裏考慮了定義的數組A大小可能比應存放的數量(size())要小,所以會運用反射機制建立一個新的類做爲返回,可是若發現collection中元素的個數(has.next())其實比a的容量要小,則把目前的元素放入a,而後返回。這個函數在添加對象時會作類型的強制轉換,因此是能夠支持集合類的類型與T不一樣。System.arraycopy()與Array.copy()

         這裏涉及了兩個數組複製的方法,Array.copyof()與System.arraycopyof().區別是Array中的賦值藉助System中的複製實現,Array返回一個新建立的數組,而System中的copy在給定的數組之間複製。

    <T> T[] finishToArray(T[] r, Iterator<?> it)

     toString() : 返回[a,b,c]

 Iterator<E>提供幾個基本操做: hasNext(), next(), remove()(刪除迭代器上次返回的元素)

相關文章
相關標籤/搜索