Java集合類中Collection是最基本的集合接口筛婉,一個Collection代表一組Object转培。Java SDK不提供直接繼承自Collection的類唾糯,Java SDK提供的類都是繼承自Collection的“子接口”如List和Set。所有實現(xiàn)Collection接口的類都必須提供兩個標準的構造函數(shù):無參數(shù)的構造函數(shù)用于創(chuàng)建一個空的Collection淮摔,有一個 Collection參數(shù)的構造函數(shù)允許用戶復制一個Collection私沮。
任何實現(xiàn)了Iterable的類,都可以將它用于foreach語句中和橙。
Set是一種不包含重復的元素的Collection仔燕,即任意的兩個元素e1和e2都有e1.equals(e2)=false,Set最多有一個null元素魔招。
List接口
List是有序的Collection晰搀,使用此接口能夠精確的控制每個元素插入的位置。用戶能夠使用索引(元素在List中的位置办斑,類似于數(shù)組下標)來訪問List中的元素外恕,這類似于Java的數(shù)組。
ArrayList
ArrayList是最常用的List實現(xiàn)類乡翅,內部是通過數(shù)組實現(xiàn)的吁讨,它允許對元素進行快速隨機訪問。數(shù)組的缺點是每個元素之間不能有間隔峦朗,當數(shù)組大小不滿足時需要增加存儲能力建丧,就要講已經有數(shù)組的數(shù)據(jù)復制到新的存儲空間中。當從ArrayList的中間位置插入或者刪除元素時波势,需要對數(shù)組進行復制翎朱、移動、代價比較高尺铣。因此拴曲,它適合隨機查找和遍歷,不適合插入和刪除凛忿。
Vector
Vector與ArrayList一樣澈灼,也是通過數(shù)組實現(xiàn)的,不同的是它支持線程的同步,即某一時刻只有一個線程能夠寫Vector叁熔,避免多線程同時寫而引起的不一致性委乌,但實現(xiàn)同步需要很高的花費,因此荣回,訪問它比訪問ArrayList慢遭贸。
ArrayList在內存不夠時默認是擴展50% + 1個,Vector是默認擴展1倍心软。
Vector提供indexOf(obj, start)接口壕吹,ArrayList沒有。
Vector屬于線程安全級別的删铃,但是大多數(shù)情況下不使用Vector耳贬,因為線程安全需要更大的系統(tǒng)開銷。
LinkedList
LinkedList是用鏈表結構存儲數(shù)據(jù)的猎唁,很適合數(shù)據(jù)的動態(tài)插入和刪除效拭,隨機訪問和遍歷速度比較慢。另外胖秒,他還提供了List接口中沒有定義的方法缎患,專門用于操作表頭和表尾元素,可以當作堆棧阎肝、隊列和雙向隊列使用挤渔。
LinkedList也實現(xiàn)了Deque,所以其具備了雙向隊列的特征
Stack
Stack繼承自Vector风题,實現(xiàn)一個后進先出的堆棧判导。Stack提供5個額外的方法使得Vector得以被當作堆棧使用∨婀瑁基本的push和pop 方法眼刃,還有peek方法得到棧頂?shù)脑兀琫mpty方法測試堆棧是否為空摇肌,search方法檢測一個元素在堆棧中的位置擂红。
Map沒有繼承Collection接口,Map提供key到value的映射围小。
一個Map中不能包含相同的key昵骤,每個key只能映射一個 value。Map接口提供3種集合的視圖肯适,Map的內容可以被當作一組key集合变秦,一組value集合,或者一組key-value映射框舔。
Hashtable與HashMap
- Hashtable不支持null作為key或者value蹦玫,HashMap支持
- Hashtable是同步的赎婚,HashMap是非同步
WeakHashMap類
WeakHashMap是一種改進的HashMap,它對key實行“弱引用”樱溉,如果一個key不再被外部所引用挣输,那么該key可以被GC回收。