今年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ù)組元素下示為沖突)