Map集合原理

2021-10-04 07:44:20 字數 1632 閱讀 8865

資料結構

內部維護乙個node的陣列(node初始時為鍊錶結構,當鏈結數量大於8後轉為紅黑樹)

定位

定位節點時,通過key的雜湊值和『&』運算子計算出下標,在node陣列獲取元素

//p(所獲取node),tab(node陣列),n(node陣列長度),hash(key計算出的hash值)

p = tab[i =

(n -1)

& hash

put:流程如下

node陣列擴容檢查

根據形參key在node陣列定位到乙個節點(節點為鍊錶或紅黑樹結構)

在該節點中尋找key相同的節點

//table和tab(指node陣列),p(定位到的節點),n(node陣列長度),i(根據key的hash值計算出的節點位置)

node

tab; node

p;int n, i;if(

(tab = table)

== null ||

(n = tab.length)==0

)//node陣列擴容檢查

n =(tab =

resize()

).length;

//定位乙個節點;判斷節點如果為空,則在node陣列裡建立乙個節點if(

(p = tab[i =

(n -1)

& hash]

)== null)

tab[i]

=newnode

(hash, key, value, null)

;else

if(e.hash == hash &&

((k = e.key)

== key ||

(key != null && key.

equals

(k))))

break

; p = e;}}

if(e != null)

}++modcount;if(

++size > threshold)

//判斷如果新增了節點,則進行擴容檢查

resize()

;afternodeinsertion

(evict)

;return null;

get:流程如下

5. 根據key定位到乙個節點(節點是鍊錶結構,或者是樹結構)

6. 判斷第乙個節點

7. 判斷紅黑樹節點

8. 遞迴尋找key相同的節點

node

tab; node

first, e;

int n; k k;if(

(tab = table)

!= null &&

(n = tab.length)

>0&&

(first = tab[

(n -1)

& hash]

)!= null)

while

((e = e.next)

!= null);}

}

集合Collection和Map結構原理

list setmap attributeofall arratlist linkedlist vector hashset treeset linkedhashset hashmap hashtable linkedhashmap treemap 資料結構 動態陣列 鍊錶結構,位址任意 動態陣列 ...

集合框架 Map集合

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

Java集合 Map集合

map map 用於儲存具有對映關係的資料,因此 map 集合裡儲存著兩組值,一組值用於儲存 map 裡的 key,另外一組用於儲存 map 裡的 value map 中的 key 和 value 都可以是任何引用型別的資料 map 中的 key 不允許重複,即同乙個 map 物件的任何兩個 key...