Java集合類的總結

集合類庫考慮到“容納自己對象”的問題,並將其分割成兩個明確的概念:
1:集合(Collection):一組單獨的元素。一個List(列表)必須按特定的順序容納元素,而一個Set(集)不可包含任何重複的元素。
2:映射(Map):一系列“鍵-值”對,如散列表身上的充分體現。Map可以和數組一樣,擴充到多維,可以返回自己鍵的一個set,一個包含自己值的List或者包含自己"鍵值"對的一個List.
集合只有三個集合組件:Map,List,Set。而且每個組件實際只有兩種或者三種的實現方式,通常只有一種特別好的方式。
一、collection
List和Set是從collection中繼承過來的,collection中的方法在List以及set中都存在。
**List**藉口中實現了ArryList以及LinkedList.List(藉口),順序是List最重要的特性,可以保證元素按照規定的順序排列,同時它爲Collection添加大量方法,以便我們在List中部插入和刪除元素(只推薦對LinkedList這樣做)。List也會生成一個ListIterator(列表反覆器),利用它可在一個列表裏朝兩個方向遍歷。
**ArrayList**是一個數組後推得到的List.作爲一個常規用途的對象容器使用,替換了以前的Vector。允許我們快速訪問元素,但在從列表中部插入和刪除元素時,速度稍慢。
**LinkedList**提供優化的順序訪問性能,同時可以高效率地在列表中部進行插入和刪除操作。但在進行隨機訪問時,速度相當慢。此時應該使用ArrayList()。
**set**擁有與Collection完全相同的接口,所以與兩種不同的List不同,它沒有什麼額外的功能。相反,set完全就是一個CollectiOn,只是具有不同的行爲。在這裏,一個Set只允許每個對象存在一個實例。set(接口)添加到Set的每個元素都必須是獨一無二的;否則就不會添加重複的元素。添加到Set的對象必須定義equals(),從而建立對象的唯一性性。一個Set不能保證自己可按任何特定的順序維持自己的元素。
**HashSet**,用於除非常小的以外所有Set對象必須定義hashcode();
**ArraySet**由一個數組後推得到Set,面向非常小的Set設計,特鄙視那些頻繁創建和刪除的。
二、Map
**Map**(接口)通常包含HashMap與ArrayMap.
**HashMap** 基於一個散列表實現,用其代替Hashtable。針對“鍵值”對的插入和檢索,這種形式具有最穩定性。
**ArrayMap**是一個ArrayList後推得到的Map.對反覆的順序提供了精確的控制。面向非常小的Map設計,特別是那些需要經常創建和刪除的。對於非常小的Map,創建和反覆所付出的代價要比HashMap設計低的多。但不適合大的Map.
三、如何進行合適的選擇
List:首選ArrayList作爲默認起點,若發現大量插入和刪除造成性能的降低,再考慮換成LinkedList
set:首選HashSet,ArraySet基本用不到。
Map:常用HashMap。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章