暑期閉關(guān)之java技術(shù)1--HashMap

今年9月份要找工作了,很期待,也很擔心,畢竟做了這么多年的java開發(fā),對java仍然是停留在“我會用”的層面上,“精通”兩字說出來就太貼臉了。但!(就是這么生硬的轉(zhuǎn)折)我要用暑假惡補兩個月java知識,在此立個flag。

“我要在簡書上每天更新一篇技術(shù)知識” ——小碼

今天先來個簡單的,聽說面試會經(jīng)常面到的HashMap,要想了解HashMap,我們先來說一下它的數(shù)據(jù)結(jié)構(gòu)

HashMap是一個“鏈表數(shù)組”,首先它是一個數(shù)組,其次每個數(shù)組元素存儲的是鏈表。下面一一介紹HashMap中的方法

1、構(gòu)造方法

HashMap構(gòu)造方法中定義了數(shù)組長度initCapacity(默認值16)和負載因子loadFactor(默認值0.75),容量大小threshold為capacity * loadFactor,其中capacity為大于initCapacity的最小2的n次方值。

2、put(key,value)

步驟1:key為null,調(diào)用putForNullKey方法(好像是插入到數(shù)組第一個元素)
步驟2:根據(jù)hash算法,計算key在數(shù)組中的下標
步驟3:遍歷當前數(shù)組元素,找出相同key值的,若存在相同key值的,則覆蓋value
步驟4:若不存在,則插入到鏈表頭部

3、get(key)

步驟1:key為null,調(diào)用getForNullKey方法
步驟2:根據(jù)hash算法,計算key在數(shù)組中的下標
步驟3:遍歷當前數(shù)組元素,找出相同key值的,若存在,則取出該value
步驟4:若不存在,則返回null

Tip:

其中hash算法為hash & (capacity - 1),這是一個對hash值取模運算,&運算比算術(shù)取模運算速度要快,其次為什么是采用capacity - 1進行&運算,是為了減少hash值沖突次數(shù)(不同hash值存在同一數(shù)組元素下示為沖突)



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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