參考HashMap底層原始碼手擼hashMap

2021-09-28 15:29:25 字數 1188 閱讀 2107

package io.renren;

public class exthashmapimplements extmap

//2.判斷陣列是否需要擴容

//3.計算hash指定位置

int index = getindex(key,default_iniital_capacity);

nodekvnode = table[index];

nodeflagnode = null;

擴容機制 為什麼要擴容? 擴容後有什麼影響? hashmap中是從什麼時候開始擴容的

//不擴容的話會導致hashmap底層鍊錶越來越多,導致查詢變慢。擴容後,index會發生變化。

//hashmap會在 size>=陣列長度*負載因子

if(size>=(default_iniital_capacity*default_load_factor))

if(kvnode == null)else

flagnode =flagnode.next;

}kvnode = new node(key,value,kvnode);

size++;

}table[index] = kvnode;

return null;

}private void resize()

}// 3.將新的table賦值給老的table

table=newtable;

default_iniital_capacity = table.length;

}private int getindex(k k,int length)

@override

public v get(k k)

node=node.next;

}return null;

}@override

public int size()

//定義節點

class nodeimplements entry

@override

public k getkey()

@override

public v getvalue()

@override

public v setvalue(v value)

}void print()

system.out.println();}}

}

HashMap底層原始碼解析

目錄 一 分析hashmap的資料結構 1.使用陣列儲存,加快訪問速度 2.陣列中的鍊錶,解決hash衝突 3.使用紅黑樹優化鍊錶,防止大量hash衝突 二 hashmap主要原始碼解讀 三 總結 在看原始碼之前,了解一下它的資料結構和執行過程,才能更快更加有效率的讀懂原始碼。hashmap實際儲存...

HashMap底層原始碼剖析

陣列 單向鍊錶 紅黑樹 陣列 陣列每一項都是乙個鍊錶,其實就是陣列和鍊錶的結合體 單向鍊錶 當法神hash碰撞時,首先會找到陣列對應位置,然後1.8採用尾插入法 1.7採用頭插入法 形成乙個單項鍊表結構 紅黑樹 當陣列中每項的鍊錶長度大於8時,會轉換為紅黑樹 hash碰撞 不同的key可能會產生相同...

HashMap底層原始碼實現

首先需要明確的是 hashmap 內部結構 可以看作是陣列和鍊錶結合組成的復合結構,陣列被分為乙個個桶 bucket 每個桶儲存有乙個或多個entry物件,每個entry物件包含三部分 key 鍵 value 值 next 指向下乙個entry 通過雜湊值決定了entry物件在這個陣列的定址 雜湊值...