java源碼品讀(3)— Collection

看完了Iterable接口,接着來看Collection接口,接口中爲子集合定義了各種基礎的方法,方便我們使用。

這是一個經常在工作中使用到的接口,Collection接口也有很多比較重要的實現,比如AbstractCollection,List,Set,Queue,CollectionView等都是比較經典的實現,值得好好的研究。

一個一個來看:

Collection,全稱java.util.Collection,1.8之後又引入了新的stream元素,更加的強大。

  1. int size()
    size()方法返回一個int類型的值,代表集合中元素的個數,如果集合中的元素個數超過正數的最大值,那麼只能返回正數的最大值。

  2. boolean isEmpty()
    返回一個boolean類型的值,代表當前集合是否爲集合。

  3. boolean contains(Object o)
    返回boolean值代表集合中是否含有這個元素,這個方法比較依賴對象中的重寫過的equals方法,如果沒有重寫equals方法,那麼代表是否含有該內存位置的對象。
    參數o如果不是Collection指定的泛型類型,會報ClassCastException異常。
    參數爲null,但是Collection要求不能存在null值的時候報NullPointerException異常。

  4. Iterator<E> iterator()
    重寫Iterable中的方法,依然未實現,返回元素迭代器的一個方法。

  5. Object[] toArray()

  6. <T> T[] toArray(T[] a)
    兩個方法都是將集合中的元素以數組的形式返回,如果集合規定了一個迭代器,那麼集合返回的數組會按照迭代器規定的順序排列後返回。第二個方法會返回一個指定類型的結合,這裏的參數T[] a的作用只是提供一個泛型的類型以及一個數組的長度,如果集合的長度大於傳入參數a數組的長度,返回的數組長度與集合長度相同,如果集合長度小於傳入參數a數組的長度,返回的數組長度與參數a數組的長度相同,但是比集合元素多出來的所有位置的都爲null。

    如果指定數組a的運行時類型跟數組內元素的類型不同時,會報java.lang.ArrayStoreException
    如果數組a爲null,報NullPointerException

  7. boolean add(E e)

  8. boolean addAll(Collection<? extends E> c)
    作用:7、向集合中添加元素 8、向集合中添加參數集合的所有元素
    返回:boolean類型的值,是否添加成功
    異常:

    1. 如果集合不支持添加操作,報UnsupportedOperationException
    2. 如果e的類型被集合指定不允許添加,報ClassCastException
    3. 如果元素的某些屬性導致元素不能被添加到集合中,報IllegalArgumentException
    4. 如果元素不能在這個時候被添加到集合中,報IllegalStateException
    5. 如果元素爲null,但是集合中不允許出現null元素,報NullPointerException.
  9. boolean remove(Object o)

  10. boolean removeAll(Collection<?> c)
    作用:9、移除集合中的指定元素 10、移除原集合中所有在參數集合中出現過的元素
    返回:boolean類型的值,是否刪除成功
    異常:

    1. 指定的元素o的運行時類型與集合指定的泛型不匹配時,報ClassCastException
    2. 指定對象中包含一到多個null元素,但是集合中不允許出現null時,報NullPointerException
    3. 如果該集合不支持移除操作,報UnsupportedOperationException
  11. boolean containsAll(Collection<?> c)
    作用:檢驗該集合是否包含指定集合的所有元素
    返回:boolean類型的值,是否包含
    異常:

    1. 參數集合中有元素的類型跟原集合指定的泛型類型不一致時,報ClassCastException
    2. 參數集合中包含null元素,但原集合不允許出現null時,報NullPointerException
  12. default boolean removeIf(Predicate<? super E> filter)
    作用:刪除集合中所有滿足刪除條件的元素
    返回:boolean類型的值,是否有成功的刪除
    異常:

    1. 如果判斷條件爲null時,報NullPointerException
    2. 如果滿足條件的元素不能被移除,報UnsupportedOperationException

    補充:這個是JDK1.8新加的方法,配合Predicate接口和lambda表達式進行使用。

  13. boolean retainAll(Collection<?> c)
    作用:原集合只保留在指定集合中存在的元素,簡單點說就是取交集
    返回:boolean類型的值,如果原集合發生改變返回true
    異常:包含contains方法和remove方法的所有可能拋出異常

  14. void clear()
    作用:清楚集合內的所有元素
    異常:如果clear操作不被集合支持,拋出UnsupportedOperationException異常

  15. default Stream<E> stream()

  16. default Stream<E> parallelStream()
    1.8新加的方法,結合Stream使用,簡單點理解就是一個增強型的迭代器。
    兩個方法前者獲取一個單通道的流處理起,後者獲得一個多通道的流處理器

這一段看的代碼當中瞭解到的1.8的新特性主要是流Stream和lambda,有機會整理一下。

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