HashMap實(shí)現(xiàn)原理

  1. 什么是HashMap?實(shí)現(xiàn)原理是什么?
    答:HashMap是基于哈希表的Map接口的非同步實(shí)現(xiàn),它允許null鍵和null值,且HashMap依托于它的數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì),存儲(chǔ)效率特別高,這是我用它的原因
    原理:HashMap是基于hash算法實(shí)現(xiàn)的,通過(guò)put(key,value)存儲(chǔ)對(duì)象到HashMap中,也可以通過(guò)get(key)從HashMap中獲取對(duì)象。當(dāng)我們使用put的時(shí)候,首先HashMap會(huì)對(duì)key的hashCode()的值進(jìn)行hash計(jì)算,根據(jù)hash值得到這個(gè)元素在數(shù)組中的位置,將元素存儲(chǔ)在該位置的鏈表上。當(dāng)我們使用get的時(shí)候,首先HashMap會(huì)對(duì)key的hashCode()的值進(jìn)行hash計(jì)算,根據(jù)hash值得到這個(gè)元素在數(shù)組中的位置,將元素從該位置上的鏈表中取出
  2. 當(dāng)兩個(gè)對(duì)象的hashcode相同會(huì)發(fā)生什么?
    答:hashcode相同,說(shuō)明兩個(gè)對(duì)象HashMap數(shù)組的同一位置上,接著HashMap會(huì)遍歷鏈表中的每個(gè)元素,通過(guò)key的equals方法來(lái)判斷是否為同一個(gè)key,如果是同一個(gè)key,則新的value會(huì)覆蓋舊的value,并且返回舊的value。如果不是同一個(gè)key,則存儲(chǔ)在該位置上的鏈表的鏈頭【頭插法】
  3. 如果兩個(gè)鍵的hashcode相同,你如何獲取值對(duì)象?
    答:遍歷HashMap鏈表中的每個(gè)元素,并對(duì)每個(gè)key進(jìn)行equal計(jì)算,最后通過(guò)get方法獲取其對(duì)應(yīng)的值對(duì)象
  4. 重新調(diào)整HashMap大小存在什么問(wèn)題嗎?
    答:兩個(gè)
    (1)HashMap時(shí)添加元素后判斷是否達(dá)到容量再考慮用不用擴(kuò)充,如果擴(kuò)充后不添加就浪費(fèi)空間
    (2)調(diào)整大小過(guò)程中如果出現(xiàn)條件競(jìng)爭(zhēng)可能會(huì)發(fā)生死循環(huán)。這個(gè)時(shí)因?yàn)檎{(diào)整過(guò)程采用頭插法,map中的數(shù)據(jù)順序會(huì)反過(guò)來(lái),在競(jìng)爭(zhēng)條件下,根據(jù)源碼,會(huì)發(fā)生原來(lái)的A->B變成兩個(gè)A->B和B->A,最終產(chǎn)生A->B->A死循環(huán)問(wèn)題
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容