溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何進(jìn)行Hashtable源碼解析

發(fā)布時間:2021-12-08 15:44:53 來源:億速云 閱讀:131 作者:柒染 欄目:大數(shù)據(jù)

如何進(jìn)行Hashtable源碼解析,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

今天我們來分析一下Hashtable的底層實現(xiàn)。提到Hashtable可能對于有些人來說會比較陌生,因為不經(jīng)常使用。這是因為Hashtable是很早就有的集合類了,因為它是在JDK1.0版本中存在的。HashMap集合是在Hashtable集合之后才有的。也可以理解為HashMap集合是優(yōu)化后的Hashtable。所以它們底層的實現(xiàn)方式幾乎是一樣,但它們也有些不同的地方要注意,并且它們都是用哈希表的方式存儲的。既然我們已經(jīng)掌握了HashMap的底層實現(xiàn),那么我們在分析Hashtable時會比較容易,所以本篇中將直接分析Hashtable的底層源碼,將不在介紹哈希表的相關(guān)知識了。還是和其它集合一樣,我們還是先看Hashtable的初始化。

  • 初始化

如何進(jìn)行Hashtable源碼解析

如何進(jìn)行Hashtable源碼解析

如何進(jìn)行Hashtable源碼解析

如何進(jìn)行Hashtable源碼解析

上面源碼是Hashtable集合初始化時所調(diào)用的方法,也就是我們通過默認(rèn)無參的構(gòu)造方法創(chuàng)建Hashtable對象時,就會執(zhí)行上述代碼。因為我們已經(jīng)分析過HashMap中的源碼了,所以在這里我們將不做過多的解釋了。我們將重點分析一下Hashtable初始化與HashMap初始化有何不同。

我們在HashMap這篇文章中分析過,在通過無參的構(gòu)造方法創(chuàng)建HashMap對象時,只會設(shè)置HashMap中的加載因子為默認(rèn)的0.75,并不會執(zhí)行底層數(shù)組的初始化。而在Hashtable中,不但設(shè)置了默認(rèn)的加載因子為0.75,并且已經(jīng)將底層的數(shù)組初始化了。默認(rèn)初始化的數(shù)組大小為為了11。

下面我們看一下Hashtable中的put方法的底層實現(xiàn)邏輯。

如何進(jìn)行Hashtable源碼解析

如何進(jìn)行Hashtable源碼解析

如何進(jìn)行Hashtable源碼解析

通過對上面源碼的分析,我們可以得出以下Hashtable的特性。

  • 當(dāng)我們通過無參構(gòu)造方法創(chuàng)建Hashtable對象時,底層的數(shù)組就會執(zhí)行初始化,并將數(shù)組大小設(shè)置為默認(rèn)大小為11,將加載因子設(shè)置為默認(rèn)值0.75

  • Hashtable中不允許保存null元素,無論是key還是value

  • Hashtable不能保存相同的key元素,如果元素的key相同,則將后添加到Hashtable中的元素的value覆蓋原Hashtable已經(jīng)存在的元素的value

  • Hashtable執(zhí)行再散列時,會創(chuàng)建比原來數(shù)組大2倍+1的新數(shù)組

  • Hashtable中我們發(fā)現(xiàn)方法中添加了同步關(guān)鍵字synchronized,這就說明在Hashtable是線程安全的集合類,在多線程開發(fā)時,無需添加額外的同步代碼,就可以保證集合的線程安全

關(guān)于如何進(jìn)行Hashtable源碼解析問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI