簡單瞭解
HashMap和Hashtable都是Map接口的典型實現類,
Hashtable
public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable
- 在java.util 包下,從JDK1.0 就開始出現。
- 是一個線程安全的Map實現。
- 底層數組+鏈表 實現
- Hashtable 中不允許使用 null 作爲 key和value。如果試圖把null值放入,會引發NullPointerException異常。
- 初始size爲 11,擴容:newsize = oldSize*2 + 1
HashMap
public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
- 在java.util 包下,從JDK1.2 開始出現。
- 是一個線程不安全的Map實現。
- 底層數組+鏈表 實現
- HashMap中允許使用 null 作爲 key和value。(由於HashMap裏的key不能重複,所以HashMap中最多隻有一組key-value對的 key爲null)
- 初始size爲 16,擴容:newsize = oldSize*2,size一定爲2的n次冪
ConcurrentHashMap
public class ConcurrentHashMap<K,V> extends AbstractMap<K,V>
implements ConcurrentMap<K,V>, Serializable
- 在java.util.concurrent 包下,從JDK 1.5 開始出現
- 線程安全
- 底層採用 分段的數組+鏈表實現
- 它是Hashtable的替代,比Hashtable的擴展性更好
- 初始size爲16