Collection層次結構中的根接口。
Collection表示一組對象,這些對象也稱為collection的元素。一些collection允許有重複的元素,而另一些則不允許。一些collection是有序的,而另一些則是無序的。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。
CollectionsFramework接口中的很多方法是根據equals方法定義的。例如,contains(Objecto)方法的規範聲明:“若且唯若此collection包含至少一個滿足(o==null?e==null:o.equals(e))的元素e時,返回true。”不應將此規範理解為它暗指調用具有非空參數o的Collection.contains方法會導致為任意的e元素調用o.equals(e)方法。可隨意對各種實現執行最佳化,只要避免調用equals即可,例如,通過首先比較兩個元素的哈希碼。(Object.hashCode()規範保證哈希碼不相等的兩個對象不會相等)。較為常見的是,各種CollectionsFramework接口的實現可隨意利用底層Object方法的指定行為,而不管實現程式認為它是否合適。
此接口是JavaCollectionsFramework的一個成員。
LinkedList
實現了List接口,底層通過雙向循環鍊表實現的。查詢效率低,但是增刪效率高。ArrayList
實際上就是一個自動增長的數組。Vector
和Arraylist相似,但vector是執行緒同步的、安全的。Stack
繼承自Vector,實現了一個後進先出的堆疊。
Set接口不包含重複的collection,set最多有一個null元素Map接口沒有實現collection接口。它的實現類包括Hashtable、HashMap、WeakHashMap。另請參見Set,List,Map,SortedSet,SortedMap,HashSet,TreeSet,ArrayList,LinkedList,Vector,Collections,Arrays,AbstractCollection以及jdk文檔