基本信息
JDK不提供此接口的任何直接實現:它提供更具體的子接口(如 Set 和 List)實現。此接口通常用來傳遞 collection,並在需要最大普遍性的地方操作這些 collection。
包 (bag) 或多集合 (multiset)(可能包含重複元素的無序 collection)應該直接實現此接口。
所有通用的 Collection 實現類(通常通過它的一個子接口間接實現 Collection)應該提供兩個“標準”構造方法:一個是 void(無參數)構造方法,用於創建空 collection;另一個是帶有 Collection 類型單參數的構造方法,用於創建一個具有與其參數相同元素新的 collection。實際上,後者允許用戶複製任何 collection,以生成所需實現類型的一個等效 collection。儘管無法強制執行此約定(因為接口不能包含構造方法),但是 Java 平台庫中所有通用的 Collection 實現都遵從它。
此接口中包含的“破壞性”方法,是指可修改其所操作的 collection 的那些方法,如果此 collection 不支持該操作,則指定這些方法拋出 UnsupportedOperationException。如果是這樣,那么在調用對該 collection 無效時,這些方法可能,但並不一定拋出 UnsupportedOperationException。例如,如果要添加的 collection 為空且不可修改,則對該 collection 調用 addAll(Collection) 方法時,可能但並不一定拋出異常。
一些 collection 實現對它們可能包含的元素有所限制。例如,某些實現禁止 null 元素,而某些實現則對元素的類型有限制。試圖添加不合格的元素將拋出一個未經檢查的異常,通常是 NullPointerException 或 ClassCastException。試圖查詢是否存在不合格的元素可能拋出一個異常,或者只是簡單地返回 false;某些實現將表現出前一種行為,而某些實現則表現後一種。較為常見的是,試圖對某個不合格的元素執行操作且該操作的完成不會導致將不合格的元素插入 collection 中,將可能拋出一個異常,也可能操作成功,這取決於實現本身。這樣的異常在此接口的規範中標記為“可選”。
由每個 collection 來確定其自身的同步策略。在沒有實現的強烈保證的情況下,調用由另一進程正在更改的 collection 的方法可能會出現不確定行為;這包括直接調用,將 collection 傳遞給可能執行調用的方法,以及使用現有疊代器檢查 collection。
Collections Framework 接口中的很多方法是根據 equals 方法定義的。例如,contains(Object o) 方法的規範聲明:“若且唯若此 collection 包含至少一個滿足 (o==null e==null :o.equals(e)) 的元素 e 時,返回 true。”不 應將此規範理解為它暗指調用具有非空參數 o 的 Collection.contains 方法會導致為任意的 e 元素調用 o.equals(e) 方法。可隨意對各種實現執行最佳化,只要避免調用 equals 即可,例如,通過首先比較兩個元素的哈希碼。(Object.hashCode() 規範保證哈希碼不相等的兩個對象不會相等)。較為常見的是,各種 Collections Framework 接口的實現可隨意利用底層 Object 方法的指定行為,而不管實現程式認為它是否合適。
集合的常用操作
boolean add(E e)
確保此 collection 包含指定的元素(可選操作)。
boolean addAll(Collection<? extends E> c)
將指定 collection 中的所有元素都添加到此 collection 中(可選操作)。
void clear()
移除此 collection 中的所有元素(可選操作)。
boolean contains(Object o)
如果此 collection 包含指定的元素,則返回 true。
boolean containsAll(Collection<?> c)
如果此 collection 包含指定 collection 中的所有元素,則返回 true。
boolean equals(Object o)
比較此 collection 與指定對象是否相等。
int hashCode()
返回此 collection 的哈希碼值。
boolean isEmpty()
如果此 collection 不包含元素,則返回 true。
Iterator<E> iterator()
返回在此 collection 的元素上進行疊代的疊代器。
boolean remove(Object o)
從此 collection 中移除指定元素的單個實例,如果存在的話(可選操作)。
boolean removeAll(Collection<?> c)
移除此 collection 中那些也包含在指定 collection 中的所有元素(可選操作)。
boolean retainAll(Collection<?> c)
僅保留此 collection 中那些也包含在指定 collection 的元素(可選操作)。
int size()
返回此 collection 中的元素數。
Object[] toArray()
返回包含此 collection 中所有元素的數組。
<T> T[]toArray(T[] a)
返回包含此 collection 中所有元素的數組;返回數組的運行時類型與指定數組的運行時類型相同。