国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

面試精選11-談HashSet的工作原理

2022-10-02 09:55 作者:架構(gòu)風清揚-趣學旅程  | 我要投稿

HashSet的存儲原理或者工作原理,主要是從如何保證唯一性來說起。

這里面主要有3個問題,需要回答?

第一,為什么要采用Hash算法?有什么優(yōu)勢,解決了什么問題?

第二,所謂哈希表是一張什么表?

第三,HashSet如何保證保存對象的唯一性?會經(jīng)歷一個什么樣的運算過程?

大家可以先思考,下面來看解讀!


第一,為什么要采用Hash算法?有什么優(yōu)勢,解決了什么問題?

解決的問題是唯一性判斷的效率問題,保證為O(1)的復雜度

其存儲數(shù)據(jù)的底層結(jié)構(gòu)采用的是數(shù)組

當我們往數(shù)組放數(shù)據(jù)的時候,你如何判斷是否唯一?

可以采用遍歷的方式,逐個比較,但是這種效率低,尤其是數(shù)據(jù)很多的情況下,時間復雜度為O(n)

所以,為了解決這個效率低的問題,我們采用新的方式

采用hash算法的關(guān)鍵,是通過調(diào)用存儲對象的hashcode方法得到一個數(shù)值,然后再根據(jù)這個數(shù)值,經(jīng)過一通復雜的固定運算規(guī)則,得到我們要存儲在數(shù)組的下標,如果此時計算的下標位置沒有其他元素,則直接存儲,不用比較,所以最佳的效果可以達到O(1)


此處,我們只會用到hashCode

但是隨著元素的不斷添加,就可能出現(xiàn)“哈希沖突”,不同的對象計算出來的hash值是相同的,這個時候,我們就需要比較,才需要用到equals方法

如果equals相同,則不插入,不相等,則形成鏈表


第二,所謂哈希表是一張什么表?

本質(zhì)是一個數(shù)組,而且數(shù)組的元素是鏈表


以上是JDK1.7的版本實現(xiàn)

在JDK1.8版本之后做了優(yōu)化

優(yōu)化點:隨著元素不斷添加,鏈表可能會越來越長,那么再遍歷鏈表的效率也會下降,所以會優(yōu)化為紅黑樹,具體這個閾值是什么?

大家可以查看下源碼,印象更深刻!


面試精選11-談HashSet的工作原理的評論 (共 條)

分享到微博請遵守國家法律
稷山县| 安宁市| 政和县| 黑河市| 江城| 新乡市| 清徐县| 黄大仙区| 邹平县| 高淳县| 张家港市| 筠连县| 本溪| 浪卡子县| 古田县| 湖南省| 涡阳县| 泰安市| 神池县| 黎川县| 温宿县| 伽师县| 仙游县| 琼中| 嘉兴市| 诸城市| 周口市| 察隅县| 德阳市| 澄城县| 马龙县| 河源市| 荆门市| 和政县| 嘉荫县| 芦溪县| 益阳市| 简阳市| 双柏县| 淳化县| 涟源市|