java HashMap和HashTable的區(qū)別詳解
HashMap和HashTable,這二者的區(qū)別經(jīng)常被別人問起,今天在此總結(jié)一下。
(一)繼承的歷史不同
public class Hashtable extends Dictionary implements Map public class HashMap extends AbstractMap implements Map
Hashtable是繼承自Dictionary類的,而HashMap則是Java 1.2引進的Map接口的一個實現(xiàn)。
(二)安全性不同
HashMap是非synchronized,而HashTable在默認的情況下是synchronized,這意味著HashTable是線程安全的,多個線程可以共享一個HashTable;而如果沒有正確的同步的話,多個線程是不能共享HashMap的。Java 5以后提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的擴展性更好。當(dāng)然,我們可以通過以下方法讓HashMap同步:
Map m = Collections.synchronizeMap(hashMap);
(三)是否可為空值的異同
HashMap可以讓你將空值作為一個表條目的key或value。HashMap中只有一條記錄可以是一個空的key,但任意數(shù)量的條目可以是空的value。這就是說,如果在表中沒有發(fā)現(xiàn)搜索鍵,或者如果發(fā)現(xiàn)了搜索鍵,但它是一個空的值,那么get()將返回null;而HashTable則不行,key和value都不允許出現(xiàn)null值。
(四)二者的遍歷方式的內(nèi)部實現(xiàn)上不同
Hashtable、HashMap都使用了 Iterator迭代器,HashMap的迭代器(Iterator)是fail-fast迭代器,而HashTable的enumerator迭代器不是fail-fast的。而由于歷史原因,Hashtable還使用了Enumeration的方式 。
(五)哈希值的使用不同
HashTable直接使用對象的hashCode,而HashMap則需要重新計算hash值。
(六)二者內(nèi)部實現(xiàn)方式的數(shù)組的初始大小和擴容的方式不同
HashTable中hash數(shù)組默認大小是11,增加的方式是 old*2+1;HashMap中hash數(shù)組的默認大小是16,而且一定是2的指數(shù)。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Java數(shù)據(jù)結(jié)構(gòu)實現(xiàn)二維數(shù)組與稀疏數(shù)組轉(zhuǎn)換詳解
稀疏數(shù)組是用于優(yōu)化,壓縮具有以下特點的二維數(shù)組:當(dāng)二維數(shù)組中的元素大部分相同,有意義的數(shù)據(jù)元素較少時,可以使用稀疏數(shù)組進行簡化,節(jié)省存儲空間2021-10-10SpringBoot敏感數(shù)據(jù)脫敏的處理方式
在Spring Boot中處理敏感數(shù)據(jù)脫敏,可以通過以下幾種方式實現(xiàn),確保敏感信息在接口返回、日志輸出、數(shù)據(jù)庫存儲等環(huán)節(jié)得到保護,文中通過代碼示例講解的非常詳細,需要的朋友可以參考下2025-03-03Spring Security如何基于Authentication獲取用戶信息
這篇文章主要介紹了Spring Security如何基于Authentication獲取用戶信息,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03解決一個JSON反序列化問題的辦法(空字符串變?yōu)榭占?
在平時的業(yè)務(wù)開發(fā)中,經(jīng)常會有拿到一串序列化后的字符串要來反序列化,下面這篇文章主要給大家介紹了如何解決一個JSON反序列化問題的相關(guān)資料,空字符串變?yōu)榭占?需要的朋友可以參考下2024-03-03