欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
hash沖突的解決方法以及hashMap的底層實(shí)現

大家平時(shí)都用過(guò)hashMap,但是可能大家對hashMap的底層實(shí)現不太了解,同時(shí)對其中可能出現的hash沖突有些不了解,這幾天我翻了下資料,也稍微了解下,記錄下來(lái),以免遺忘。

上圖就是一個(gè)散列表(Hash table,也叫哈希表),是根據關(guān)鍵碼值(Key value)而直接進(jìn)行訪(fǎng)問(wèn)的數據結構。也就是說(shuō),它通過(guò)把關(guān)鍵碼值映射到表中一個(gè)位置來(lái)訪(fǎng)問(wèn)記錄,以加快查找的速度。這個(gè)映射函數叫做散列函數,存放記錄的數組叫做散列表。但是當關(guān)鍵字數量比較大的時(shí)候,難免就會(huì )造成一個(gè)問(wèn)題,就是不一樣的關(guān)鍵字隱射到同一個(gè)地址上,這樣就造成了一個(gè)問(wèn)題,就是hash沖突。那么如何解決呢?

一般比較常用的方法有開(kāi)放地址法:(內容來(lái)自百度百科)
1. 開(kāi)放尋址法:Hi=(H(key) + di) MOD m,i=1,2,…,k(k<=m-1),其中H(key)為散列函數,m為散列表長(cháng),di為增量序列,可有下列三種取法:
1.1. di=1,2,3,…,m-1,稱(chēng)線(xiàn)性探測再散列;順序查看表的下一單元,直至找到某個(gè)空單元,或查遍全表。
1.2. di=1^2,-1^2,2^2,-2^2,⑶^2,…,±(k)^2,(k<=m/2)稱(chēng)二次探測再散列;在表的左右進(jìn)行跳躍式探測。
1.3. di=偽隨機數序列,稱(chēng)偽隨機探測再散列。根據產(chǎn)生的隨機數進(jìn)行探測。

2 再散列法:建立多個(gè)hash函數,若是當發(fā)生hash沖突的時(shí)候,使用下一個(gè)hash函數,直到找到可以存放元素的位置。

3 拉鏈法(鏈地址法):就是在沖突的位置上建立一個(gè)鏈表,然后將沖突的元素插入到鏈表尾端,

4 建立公共溢出區:將哈希表分為基本表和溢出表,將與基本表發(fā)生沖突的元素放入溢出表中。

底層的hashMap是由數組和鏈表來(lái)實(shí)現的,就是上面說(shuō)的拉鏈法。首先當插入的時(shí)候,會(huì )根據key的hash值然后計算出相應的數組下標,計算方法是index = hashcode%table.length,(這個(gè)下標就是上面提到的bucket),當這個(gè)下標上面已經(jīng)存在元素的時(shí)候那么就會(huì )形成鏈表,將后插入的元素放到尾端,若是下標上面沒(méi)有存在元素的話(huà),那么將直接將元素放到這個(gè)位置上。
當進(jìn)行查詢(xún)的時(shí)候,同樣會(huì )根據key的hash值先計算相應的下標,然后到相應的位置上進(jìn)行查找,若是這個(gè)下標上面有很多元素的話(huà),那么將在這個(gè)鏈表上一直查找直到找到對應的元素。

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
什么是哈希表?
Hash算法詳解
HashMap詳解
面經(jīng)手冊 · 第4篇《HashMap數據插入、查找、刪除、遍歷,源碼分析》
面試細節:為什么 HashMap 默認加載因子非得是0.75?
數據庫的底層算法和數據結構
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久