1. 程式人生 > >List,Set和Map的比較

List,Set和Map的比較

回答這個問題首先可以先說明每一個的特徵:

List , Set, Map都是介面,前兩個繼承至Collection介面,Map為獨立介面

一、List(關鍵詞:有序,可重複)

實現類有:

1.ArrayList:底層資料結構是陣列,查詢快增刪慢。執行緒不安全

2.LinkedList:底層資料結構是鏈式結構,查詢慢增刪快。執行緒不安全

3.Vector:底層資料結構是陣列,查詢快增刪慢。執行緒安全

二、Set(關鍵詞:無序,唯一)

1.HashSet
底層資料結構是雜湊表。(無序,唯一)
如何來保證元素唯一性?
答:依賴兩個方法:hashCode()和equals()

2.LinkedHashSet
底層資料結構是連結串列和雜湊表。(FIFO插入有序,唯一)
(1)由連結串列保證元素有序
(2)由雜湊表保證元素唯一

3.TreeSet
底層資料結構是紅黑樹。(唯一,有序)
(1). 如何保證元素排序的呢?
自然排序
比較器排序
(2).如何保證元素唯一性的呢?
根據比較的返回值是否是0來決定

Map介面有三個比較重要的實現類,分別是HashMap、TreeMap和HashTable。

  • TreeMap是有序的,HashMap和HashTable是無序的。
  • Hashtable的方法是同步的,HashMap的方法不是同步的。這是兩者最主要的區別
  1.     Hashtable是執行緒安全的,HashMap不是執行緒安全的。

  2.     HashMap效率較高,Hashtable效率較低

  3. 如果對同步性或與遺留程式碼的相容性沒有任何要求,建議使用HashMap。 檢視Hashtable的原始碼就可以發現,除建構函式外,Hashtable的所有 public 方法宣告中都有 synchronized關鍵字,而HashMap的原始碼中則沒有。

  4. Hashtable不允許null值,HashMap允許null值(key和value都允許)

  5. 父類不同:Hashtable的父類是Dictionary,HashMap的父類是AbstractMap