天天看点

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异同比较