HashMap 不是線程安全的
HashMap 是 map 接口的實現(xiàn)類方仿,是將鍵映射到值的對象征字,其中鍵和值都是對象精置,并且不能包含重復(fù)鍵计寇,但可以包含重復(fù)值。HashMap 允許 null key 和 null value脂倦,而 HashTable 不允許番宁。
HashTable 是線程安全 Collection。
HashMap 是 HashTable 的輕量級實現(xiàn)赖阻,他們都完成了Map 接口蝶押,主要區(qū)別在于 HashMap 允許 null key 和 null value,由于非線程安全,效率上可能高于 Hashtable火欧。
區(qū)別如下:
- HashMap允許將 null 作為一個 entry 的 key 或者 value播聪,而 Hashtable 不允許。
- HashMap 把 Hashtable 的 contains 方法去掉了布隔,改成 containsValue 和 containsKey离陶。因為 contains 方法容易讓人引起誤解。
- HashTable 繼承自 Dictionary 類衅檀,而 HashMap 是 Java1.2 引進的 Map interface 的一個實現(xiàn)招刨。
- HashTable 的方法是 Synchronize 的,而 HashMap 不是哀军,在多個線程訪問 Hashtable 時沉眶,不需要自己為它的方法實現(xiàn)同步,而 HashMap 就必須為之提供外同步杉适。
- Hashtable 和 HashMap 采用的 hash/rehash 算法都大概一樣谎倔,所以性能不會有很大的差異。