Java集合總結

今天又複習Java的集合類,相比以前的學習,又有了許多收穫,並且時記到腦子裏邊了,或者是要堅持寫博客的緣故把。java

進入正題,首先是要搞清Collection和Collections,Collection是List,set和Queue接口的父接口,而Collections是一個操做集合的工具類。算法

集合體系知識以下:數組

 

首先說Set集合:Set集合相似於一個蜜罐,能夠把多個對象丟進去,而Set不可以記住添加元素的順序。Set集合與Collection基本相同,沒有提供額外的方法,也能夠說Set就是Collection。若是add()相同的元素,會返回flase,添加失敗。安全

HashSet:HashSet按照Hash算法來存儲結合中的元素,所以具備良好的存取和查找的性能。簡單的說,HashMap的底層實現是「基於拉鍊法的散列表」。詳細分析請參考深刻解析HashMap、HashTable數據結構

LinkedHashSet:使用連表來維護元素,由於須要維護元素的插入順序,因此性能略低,低於HashSet。工具

TreeSet:採用紅黑樹的數據結構來存儲集合元素,而且支持兩種排序方法,天然排序和定製排序。注意:使用TreeSet時,保證添加的對象全都實現了Comparable接口,不然會添加失敗,而且拋出ClassCastExecption異常。簡單一句話,若是想要TreeSet正常運行,只能添加同一種類型的對象。性能

EnumSet:爲枚舉類設計的集合類。內部以向量的形式存儲,存儲形式很是緊湊,全部Enumset在對象佔用內存小,並且效率高。學習

各Set實現類性能分析:HashSet性能老是高於TreeSet,若是想要保持排序的set,採用TreeSet。LinkedHashSet對於普通的插入刪除來講比HashSet略微慢一點,可是有了連表,遍歷LinkedHashSet會更快,EnumSet是Set實現類中性能最好的,可是隻能保存同一類型的元素。而且全部的set實現類都是線程不安全的。.net

-------------------------------------分割線-----------------------------------------------------線程

如今咱們再來講這個List和Queue

ArrayList和Vector (包括以後的ArrayDeque)都是基於數組來實現的,封裝了一個動態的,容許在分配Object[]數組。而且這個ArrayList和Vector的,Object[]數組的大小爲10(ArrayDeque大小爲16).

對於Vcetor,這是一個比較古老的的集合,產生於jdk1.0,那時候java尚未集合,方法名都很長。以後也作過一些更新,方法名簡短了。而ArrayList一開始就做爲List的主要實現類。因此比Vector優異一些,之後開發過程過能夠採用。在這就是ArrayList是線程不安全的,可是可使用Collections工具類,把ArrayList變成,線程安全的。

--

Queue集合,用於模擬隊列的「先進先出的結構」,並且PriorityQueue實現類是一個比較標準的實現類,之因此說是比較標準的,是由於元素並非按照添加的順序來排序的,而是按照隊列元素大小進行排序的。

Deque接口是Queue的子接口,他表明了一個雙端隊列,Deque接口的典型實現類:ArrayDeque,是基於數組來實現的,底層數組長度爲16

再來講說這個LinkedList,既能夠當成隊列,也能夠當成棧來用。

最後分析一下性能:對於經常使用類ArrayList(基於數組)和LinkedList(基於線性表),初學者能夠沒必要理會性能差劣,只知道LinkedList不只提供了List功能,還提供了雙端隊列,棧的功能。

拋棄插入刪除性能,整體來來講ArrayList的性能優異與LinkedList,由於大多數能夠考慮使用ArrayList.對於ArrayList,Vector,and LinkedList的遍歷,由於ArrayList和Vector是基於數組實現的,應該使用隨機訪問方法get去訪問,對於LinkedList應該採用迭代器。

 =======================

關於Map在map的全部子接口和實現類中,最經常使用的就是HashMap和TreeMap,換句話來講Map 和Set有着殊途同歸之妙,詳解能夠看API,java源碼就是先是實現了HaspMap TreeMap等集合,而後經過包裝一個全部value都有null的Map集合實現了Set的集合類。

用的話首先選擇HaspMap,若是想要保持排序,則用TreeMap

參考資料:李剛大叔的《瘋狂Java講義》---

文章主要是本身學習的筆記,不免有些語句表達的不正確甚至是錯誤的,歡迎你們指出,必定虛心改正。

相關文章
相關標籤/搜索