淺析Java中Map與HashMap,Hashtable,HashSet的區(qū)別
HashTable和HashMap區(qū)別
第一,繼承的父類不同。
Hashtable繼承自Dictionary類,而HashMap繼承自AbstractMap類。但二者都實(shí)現(xiàn)了Map接口。
public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, Serializable
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
第二,線程安全性不同。
Hashtable 中的方法是Synchronize的,而HashMap中的方法在缺省情況下是非Synchronize的。在多線程并發(fā)的環(huán)境下,可以直接使用Hashtable,不需要自己為它的方法實(shí)現(xiàn)同步,但使用HashMap時就必須要自己增加同步處理。
第三,是否提供contains方法
HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey,因為contains方法容易讓人引起誤解。
Hashtable則保留了contains,containsValue和containsKey三個方法,其中contains和containsValue功能相同。
第四,key和value是否允許null值。
其中key和value都是對象,并且不能包含重復(fù)key,但可以包含重復(fù)的value。
Hashtable中,key和value都不允許出現(xiàn)null值。
HashMap中,null可以作為鍵,這樣的鍵只有一個;可以有一個或多個鍵所對應(yīng)的值為null。當(dāng)get()方法返回null值時,可能是 HashMap中沒有該鍵,也可能使該鍵所對應(yīng)的值為null。因此,在HashMap中不能由get()方法來判斷HashMap中是否存在某個鍵, 而應(yīng)該用containsKey()方法來判斷。
第五,兩個遍歷方式的內(nèi)部實(shí)現(xiàn)上不同。
Hashtable、HashMap都使用了 Iterator。而由于歷史原因,Hashtable還使用了Enumeration的方式 。
第六,hash值不同。
哈希值的使用不同,HashTable直接使用對象的hashCode。而HashMap重新計算hash值。
第七,內(nèi)部實(shí)現(xiàn)使用的數(shù)組初始化和擴(kuò)容方式不同。
Hashtable和HashMap它們兩個內(nèi)部實(shí)現(xiàn)方式的數(shù)組的初始大小和擴(kuò)容的方式。HashTable中hash數(shù)組默認(rèn)大小是11,增加的方式是 old*2+1。
HashMap中hash數(shù)組的默認(rèn)大小是16,而且一定是2的指數(shù)。
- Java中List、Set、Map的區(qū)別和實(shí)現(xiàn)方式示例代碼
- Java中List Set和Map之間的區(qū)別_動力節(jié)點(diǎn)Java學(xué)院整理
- Java中HashSet和HashMap的區(qū)別_動力節(jié)點(diǎn)Java學(xué)院整理
- Java中的Set、List、Map的用法與區(qū)別介紹
- Java中HashMap和Hashtable及HashSet的區(qū)別
- java使用單向鏈表解決數(shù)據(jù)存儲自定義排序問題
- java8中NIO緩沖區(qū)(Buffer)的數(shù)據(jù)存儲詳解
- Java數(shù)據(jù)存儲的“雙子星”對決(Map和Set的區(qū)別)
相關(guān)文章
簡單了解Spring beanfactory循環(huán)依賴命名重復(fù)屬性
這篇文章主要介紹了簡單了解Spring beanfactory循環(huán)依賴命名重復(fù)2大屬性,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06
Kafka消費(fèi)客戶端協(xié)調(diào)器GroupCoordinator詳解
這篇文章主要為大家介紹了Kafka消費(fèi)客戶端協(xié)調(diào)器GroupCoordinator使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
JAVA Iterator接口與增強(qiáng)for循環(huán)的實(shí)現(xiàn)
這篇文章主要介紹了JAVA Iterator接口與增強(qiáng)for循環(huán)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
HttpServletRequest的getParameter()的坑及解決
這篇文章主要介紹了HttpServletRequest的getParameter()的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07

