行政部建設(shè)公司網(wǎng)站值得收藏的五個搜索引擎
文章底部有個人公眾號:熱愛技術(shù)的小鄭。主要分享開發(fā)知識、學(xué)習(xí)資料、畢業(yè)設(shè)計(jì)指導(dǎo)等。有興趣的可以關(guān)注一下。為何分享? 踩過的坑沒必要讓別人在再踩,自己復(fù)盤也能加深記憶。利己利人、所謂雙贏。
面試官: 介紹一下HashMap底層的實(shí)現(xiàn)原理
參考答案:
它基于hash算法,通過put方法和get方法存儲和獲取對象。
存儲對象時,我們將K/V傳給put方法時,它調(diào)用K的hashCode計(jì)算hash從而得到bucket位置,進(jìn)一步存儲,HashMap會根據(jù)當(dāng)前bucket的占用情況自動調(diào)整容量(超過Load Facotr則resize為原來的2倍)。獲取對象時,我們將K傳給get,它調(diào)用hashCode計(jì)算hash從而得到bucket位置,并進(jìn)一步調(diào)用equals()方法確定鍵值對。
如果發(fā)生碰撞的時候,HashMap通過鏈表將產(chǎn)生碰撞沖突的元素組織起來。在Java 8中,如果一個bucket中碰撞沖突的元素超過某個限制(默認(rèn)是8),則使用紅黑樹來替換鏈表,從而提高速度。