HashMap原始碼分析

2021-10-02 11:21:22 字數 983 閱讀 1819

hashmap原始碼

map.put(1,「zuojie」) key value

儲存資料--------》一定這些資料計算機的底層------>儲存的方式(資料結構) 陣列(arraylist.add),鍊錶(linkedlist.add 雙向鍊錶),樹型,圖型

(1) 節點的位置到底存在**?怎麼得來的?

a 先得到乙個整型樹 object.hashcode();

hash演算法(控制node節點的位置)

key.hashcode 根據唯一的key 值得到hashcode 相對唯一

b 控制這個整型樹的範圍是0-15

(2) 陣列的容量16一定有不夠用的時候怎麼辦?

擴容if (++size > threshold)

resize(); threshold一定要小於16

擴容的標準 陣列的大小* 0.75

n = (tab = resize()).length; resize應該有用於陣列例項化的功能
else
if ((p = tab[i = (n - 1) & hash]) == null)

tab[i] = newnode(hash, key, value, null);

&運算在計算機中的效率更

HashMap原始碼分析

public hashmap int initialcapacity,float loadfactor 2 接下來是重要的put方法,put方法用於將鍵值對儲存到map中,讓我們來具體分析一下。public v put k key,v value if key null 若key為null,則將va...

HashMap 原始碼分析

1 getentry object key 方法 final entrygetentry object key return null 根據key的hash值計算出索引,得到table中的位置,然後遍歷table處的鍊錶 for entrye table indexfor hash,table.le...

HashMap原始碼分析

public v put k key,v value if key null return putfornullkey value int hash hash key int i indexfor hash,table.length for entrye table i e null e e.nex...