Set,List,Map

收集自網絡。

Set無序無重複對象可以爲空但要唯一

HashSet
HashSet有以下特點
不能保證元素的排列順序,順序有可能發生變化
不是同步的
集合元素可以是null,但只能放入一個null
當向HashSet結合中存入一個元素時,HashSet會調用該對象的hashCode()方法來得到該對象的hashCode值,然後根據 hashCode值來決定該對象在HashSet中存儲位置。
簡單的說,HashSet集合判斷兩個元素相等的標準是兩個對象通過equals方法比較相等,並且兩個對象的hashCode()方法返回值相 等
注意,如果要把一個對象放入HashSet中,重寫該對象對應類的equals方法,也應該重寫其hashCode()方法。其規則是如果兩個對 象通過equals方法比較返回true時,其hashCode也應該相同。另外,對象中用作equals比較標準的屬性,都應該用來計算 hashCode的值。

LinkedHashSet
LinkedHashSet集合同樣是根據元素的hashCode值來決定元素的存儲位置,但是它同時使用鏈表維護元素的次序。這樣使得元素看起 來像是以插入順序保存的,也就是說,當遍歷該集合時候,LinkedHashSet將會以元素的添加順序訪問集合的元素。
LinkedHashSet在迭代訪問Set中的全部元素時,性能比HashSet好,但是插入時性能稍微遜色於HashSet。

TreeSet類
TreeSet是SortedSet接口的唯一實現類,TreeSet可以確保集合元素處於排序狀態。TreeSet支持兩種排序方式,自然排序 和定製排序,其中自然排序爲默認的排序方式。向TreeSet中加入的應該是同一個類的對象。
TreeSet判斷兩個對象不相等的方式是兩個對象通過equals方法返回false,或者通過CompareTo方法比較沒有返回0

遍歷Set用Iterator遍歷

List有序列表無重複元素

List接口主要實現類包括:

  • ArrayList() : 代表長度可以改變得數組。可以對元素進行隨機的訪問,向ArrayList()中插入與刪除元素的速度慢。 

  • LinkedList(): 在實現中採用鏈表數據結構。插入和刪除速度快,訪問速度慢。

遍歷List可以用for循環通過List下標遍歷或者Iterator遍歷

Map(映射): 

Map 是一種把鍵對象和值對象映射的集合,它的每一個元素都包含一對鍵對象和值對象。 Map沒有繼承於Collection接口 從Map集合中檢索元素時,只要給出鍵對象,就會返回對應的值對象。

 2.兩種常規Map實現

  HashMap:基於哈希表實現。使用HashMap要求添加的鍵類明確定義了hashCode()和equals()[可以重寫hashCode()和equals()],爲了優化HashMap空間的使用,您可以調優初始容量和負載因子。

  (1)HashMap(): 構建一個空的哈希映像

  (2)HashMap(Map m): 構建一個哈希映像,並且添加映像m的所有映射

  (3)HashMap(int initialCapacity): 構建一個擁有特定容量的空的哈希映像

  (4)HashMap(int initialCapacity, float loadFactor): 構建一個擁有特定容量和加載因子的空的哈希映像

  TreeMap:基於紅黑樹實現。TreeMap沒有調優選項,因爲該樹總處於平衡狀態。

  (1)TreeMap():構建一個空的映像樹

  (2)TreeMap(Map m): 構建一個映像樹,並且添加映像m中所有元素

  (3)TreeMap(Comparator c): 構建一個映像樹,並且使用特定的比較器對關鍵字進行排序

  (4)TreeMap(SortedMap s): 構建一個映像樹,添加映像樹s中所有映射,並且使用與有序映像s相同的比較器排序

  3.兩種常規Map性能

  HashMap:適用於在Map中插入、刪除和定位元素。

  Treemap:適用於按自然順序或自定義順序遍歷鍵(key)。

  4.總結

  HashMap通常比TreeMap快一點(樹和哈希表的數據結構使然),建議多使用HashMap,在需要排序的Map時候才用TreeMap.HashMap非線程同步,HashTable線程同步。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章