學習筆記HashMap原始碼學習

2021-09-25 23:17:27 字數 2152 閱讀 1929

hashmap

hashmapextends abstractmap

implements map, cloneable, serializable 繼承abstractmap類,實現頂層介面map介面

int default_initial_capacity = 1 << 4 預設容量為16

int maximum_capacity = 1 << 30 最大容量為1左移30位,即2的30次方

float default_load_factor = 0.75f 預設的負載係數為0.75

transient int size 實際儲存的元素個數

transient int modcount hashmap被修改的次數

final float loadfactor 負載因子

int threshold hashmap儲存臨界值

class nodeimplements map.entry

transient node table 底層使用實現了map.entry介面的node儲存資料

static final int hash(object key) 呼叫hashcode函式計算儲存位置

public hashmap(int initialcapacity, float loadfactor) hashmap建構函式,能夠指定容量大小和負載因子

hashmap(map<? extends k, ? extends v> m) hashmap建構函式,並將乙個已有的map作為引數傳入,自動將map中的元素拷貝到當前hashmap中

int size() 獲取當前元素個數

boolean isempty() 判斷hashmap是否為空

v get(object key) 通過getnode()方法獲取key中的元素

boolean containskey(object key) 判斷鍵key是否存在

v put(k key, v value)

v putval(int hash, k key, v value, boolean onlyifabsent,

boolean evict) 呼叫putval方法將乙個鍵值對新增到hashmap中去

void putall(map<? extends k, ? extends v> m) 將map m中的所有元素都進行新增

v remove(object key) 移除鍵為key的元素

void clear() 清空所有元素

boolean containsvalue(object value) 判斷值為value的元素是否存在

set keyset() 返回所有key集合

collection values() 返回所有value的集合

v replace(k key, v value) 對鍵為key的值替換為value

v putifabsent(k key,

v putifpresent(k key,

v compute(k key,

final node resize()

else if ((newcap = oldcap << 1) < maximum_capacity && 如果不是最大並且乘以2之後仍然不是最大,則用目前的容量乘以2

oldcap >= default_initial_capacity)

newthr = oldthr << 1; // double threshold }

else if (oldthr > 0) // initial capacity was placed in threshold 如果存在臨界值並且大於0,則直接用臨界值代替新的容量

newcap = oldthr;

else

if (newthr == 0)

threshold = newthr;

@suppresswarnings()

node newtab = (node)new node[newcap];

table = newtab;

if (oldtab != null)

else

} while ((e = next) != null);

if (lotail != null)

if (hitail != null) }

} }}

return newtab; }

HashMap原始碼學習筆記

hashmap的底層主要是基於陣列和鍊錶來實現的,它之所以有相當快的查詢速度主要是因為它是通過計算雜湊碼來決定儲存的位置。hashmap中主要是通過key的hashcode來計算hash值的,只要hashcode相同,計算出來的hash值就一樣。如果儲存的物件對多了,就有可能不同的物件所算出來的ha...

HashMap原始碼學習筆記

hashmap 資料結構 初始容量 static final int de t initial capacity 1 4 最大容量 static final int maxinum capacity 1 30 擴容因子 static final float default load factor 0...

HashMap原始碼筆記

預設的初始化容量為16 static final int default initial capacity 1 4 最大的容量,容量的值必須是2的冪並且小於最大的容量,最大值為2的30次方 static final int maximum capacity 1 30 載入因子預設值為0.75 sta...