Hashtable和HashMap及ConcurrentHashMap的區別

簡單瞭解

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章