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物件在這個陣列的定址 雜湊值...