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的方法不是同步的。這是兩者最主要的區別
-
Hashtable是執行緒安全的,HashMap不是執行緒安全的。
-
HashMap效率較高,Hashtable效率較低
-
如果對同步性或與遺留程式碼的相容性沒有任何要求,建議使用HashMap。 檢視Hashtable的原始碼就可以發現,除建構函式外,Hashtable的所有 public 方法宣告中都有 synchronized關鍵字,而HashMap的原始碼中則沒有。
-
Hashtable不允許null值,HashMap允許null值(key和value都允許)
-
父類不同:Hashtable的父類是Dictionary,HashMap的父類是AbstractMap