map區(qū)別
-
ConcurrentHashMap
- ConcurrentHashMap使用(Segment[分片])鎖機制印叁。每個段其實就是一個小的
hashTable
碉纳,它們有自己的鎖溅蛉。只要多個修改操作發(fā)生在不同的段上,它們就可以并發(fā)進行秆撮。同樣當一個線程占用鎖訪問其中一個段數(shù)據(jù)的時候四濒,其他段的數(shù)據(jù)也能被其他線程訪問。 - 存效率高
- ConcurrentHashMap使用(Segment[分片])鎖機制印叁。每個段其實就是一個小的
-
ConcurrentSkipListMap
- key有順序
- 插入數(shù)據(jù)慢伤哺,獲取數(shù)據(jù)快
-
Hashtable
- HashTable不允許有
null
值的存在 - HashTable中調(diào)用put方法時隧熙,如果key為
null
掏呼,直接拋出NullPointerException
- HashTable是同步的俘陷,效率很低
- sychronized意味著在一次僅有一個線程能夠更改Hashtable。就是說任何線程要更新Hashtable時要首先獲得同步鎖掉伏,其它線程要等到同步鎖被釋放之后才能再次獲得同步鎖更新Hashtable轰异。
- hashTable初始化大小 11
/** lin 210 * Constructs a new, empty hashtable with a default initial capacity (11) * and load factor (0.75). */ public Hashtable() { this(11, 0.75f); }
- HashTable不允許有
-
HashMap
- HashMap是非線程安全的
- HashMap的鍵和值都
允許
有null值存在憔古,而HashTable則不行仆邓。 - 因為線程安全的問題鲜滩,HashMap效率比HashTable的要高
- 實現(xiàn)同步方法
Map m = Collections.synchronizeMap(hashMap);
- hashMap 初始化 16
/** * Constructs an empty <tt>HashMap</tt> with the default initial capacity * (16) and the default load factor (0.75). */ public HashMap() { this.loadFactor = DEFAULT_LOAD_FACTOR; // all other fields defaulted }
源碼:github 歡迎各位同學(xué)指出問題/建議