HashMap和HashTable的區別是面試時面試官經常問的問題,在回答的時候可以選擇重點做回答,區別主要有下面幾點:
key和value的取值范圍不同
HashMap和HashTable都是基於哈希表來實現鍵值映射的工具類,底層都是哈希表結構。
HashMap允許鍵為null,值為null,對於HashMap如果使用get方法返回null,並不能表明HashMap不存在這個key,有可能是鍵對應的值為null。
HashTable則不允許null鍵和null值。
線程安全
HashMap是非synchronized的,而HashTable是synchronized的。synchronized是Java語言的關鍵字,可用來給對象和方法或者代碼塊加鎖,當它鎖定一個方法或者一個代碼塊的時候,同一時刻最多只有一個線程執行這段代碼。這說明HashTable是線程安全的,而HashMap線程不安全。
效率與同步
HashMap是不同步的、效率高的,HashTable是同步的、效率低的。
雖然HashMap不是線程安全的,但是它的效率會比HashTable要好很多。這樣設計是合理的。在我們的日常使用當中,大部分時間是單線程操作的。HashMap把這部分操作解放出來了。
當需要多線程操作的時候可以使用線程安全的ConcurrentHashMap。ConcurrentHashMap雖然也是線程安全的,但是它的效率比HashTable要高很多。
選擇與使用
如果不需要線程安全,那么使用HashMap,如果需要線程安全,那么使用ConcurrentHashMap,ConcurrentHashMap不但是線程安全的,效率也比HashTable要高,HashTable已經幾乎被淘汰了。