天天看點

HashMap、HashTable以及ConCurrentHashMap、HashSet異同比較

轉載出處: 連結1 

 HashMap和HashTable的差別一種比較簡單的回答是:

(1)HashMap是非線程安全的,HashTable是線程安全的。

(2)HashMap的鍵和值都允許有null存在,而HashTable則都不行。

(3)因為線程安全、哈希效率的問題,HashMap效率比HashTable的要高。

(4)HashMap是非線程安全的,HashTable是線程安全的,内部的方法基本都經過synchronized修飾。

(5)因為同步、哈希性能等原因,性能肯定是HashMap更佳,是以HashTable已被淘汰。

(6) HashMap允許有null值的存在,而在HashTable中put進的鍵值隻要有一個null,直接抛出NullPointerException。

(7)HashMap預設初始化數組的大小為16,HashTable為11。前者擴容時乘2,使用位運算取得哈希,效率高于取模。而後者為乘2加1,都是素數和奇數,這樣取模哈希結果更均勻。

 (8)在HashMap的基礎上,ConcurrentHashMap将資料分為多個segment,預設16個(concurrency level),然後每次操作對一個segment加鎖,避免多線程鎖得幾率,提高并發效率。

HashMap、HashTable以及ConCurrentHashMap、HashSet異同比較