關於集合Map

2021-10-05 08:40:33 字數 1047 閱讀 1873

1.map的資料結構

首先要知道map的乙個資料結構,在jdk1.7以前,map的資料結構是陣列+鍊錶但在jdk1.8,map的資料結構就變成了陣列+鍊錶+紅黑樹,本身是陣列,但由於hash演算法有hash衝突(hash演算法會返回乙個int型的資料,當返回的資料相同時,就叫hash衝突),所以加入了鍊錶,但隨著hash衝突的增加,鍊錶越來越長,查詢起來也不方便,所以加入了紅黑樹(又叫自平衡二叉樹:在一條支路太長時,會自動的分出乙個支路,以加快查詢資料速度)。

2.put方法

當插入乙個元素時,會判斷鍵值對陣列(存鍵值對的)是否存在,如果不存在則呼叫resize方法擴容。如果存在會利用存入的key來計算乙個hash值找到對應的乙個索引值(i)

判斷對應索引值的陣列元素table[i]是否為空,為空就直接插入到陣列然後判斷陣列大小是否超過最大容量,超過就擴容,沒超過就結束。不為空的話就看鍵值對陣列對應儲存的key是否存在,存在就覆蓋,不存在就判斷是否是紅黑樹的節點,是就直接插入紅黑樹裡,不是的話就在煉表裡,遍歷鍊錶,判斷key是否存在,存在就覆蓋,不存在就插入,還要判斷插入後鍊錶長度大於8且陣列長度大於64,鍊錶就轉變成紅黑樹結構。

3.hashmap的長度為何總是2的冪次方

為了能讓hashmap訪問高效,盡量較少的發生碰撞,數量盡量分配均勻,每個鍊錶和紅黑樹的長度盡量相同。就是資料應該放**的乙個方法,可以用hash%length(陣列長度)的方式來實現,但是取餘操作是乙個很費時間的操作,但是如果除數是2的冪次方的話,取餘操作等價於 與其除數-1的與操作,就是hash%length等價於hash&length-1與操作的效率比取餘操作效率高出很多,那為什麼不用與操作呢。

集合 關於Map

map集合是雙列集合的頂層介面,下面分為treemap和hashmap.那麼我們先來看一下map和collection的區別 1.map是雙列的,而collection是單列的 2.map的鍵都是唯一的,而collection中只有set集合的值是唯一的 3.map集合的資料結構值針對鍵有效,跟值無...

關於Map集合的運用

在學map的時候,肯定是懵逼的,所以要先進行了解map的定義,然後看看map的應用 接下來我們先了解下map 初識map map集合中存放的都是一組組對映關係 key value 在集合中允許巢狀,key不能重複 注意 在map中增加不同於其他的集合,其他的集合用add 來增加,而map是用put ...

集合框架 Map集合

map集合 同collection,是集合框架中的頂層介面。一次新增一對元素,collection一次新增乙個元素。所有,map集合也稱為雙列集合,collection集合稱為單列集合。介面map key是鍵,value是值,其實map集合中儲存的就是鍵值對,map集合中必須保證鍵的唯一性。常用方法...