hash雜湊將乙個任意的長度通過某種(hash函式演算法)演算法轉換成乙個固定的值。移位
map:地圖 x,y儲存
總結:通過hash出來的乙個值,然後通過這個值定位到map然後把value儲存到這個map中。
/**
* 初始化容量,1左移4位 16容量
*/static
final
int default_initial_capacity =
1<<4;
// aka 16
/*** 最大的容量,1左移30位 1的三十次方
*/static
final
int maximum_capacity =
1<<30;
/*** the load factor used when none specified in constructor.
* 初始化容器default_load_factor
* 載入因子係數
* 1分成四等分 0.25*3 在容量的3/4(0.75)的時候擴容
*/static
final
float default_load_factor =
0.75f
;
1、key是否可以為空、null?答案:可以
2、key是否可以重複
public v put
(k key, v value)
final v putval
(int hash, k key, v value,
boolean onlyifabsent,
boolean evict)
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;
}
3、hashmap什麼時候做擴容的?put的時候,達到3/4的時候開始擴容,按照2的倍數做擴容,一定是偶數
4、hahmap table:陣列+鍊錶的資料結構
1、初始化引數介紹
2、put方法
3、get方法
4、hash重複
每一組hashmap的資料都會存在node物件中
static
class
node
implements
map.entry
public
final k getkey()
public
final v getvalue()
public
final string tostring()
public
final
inthashcode()
public
final v setvalue
(v newvalue)
public
final
boolean
equals
(object o)
return
false;}
}
1、伸縮性:每當hashmap擴容的時候需要重新去add entry物件,需要重新hash。然後放入我們新的entry table 陣列裡面。如果在工作中知道hashmap需要存多少值,最好先指定他們擴容的大小,防止在put的時候再進行擴容很多次
2、時間複雜度:hash演算法決定了你的效率
HashMap實現原理,原始碼分析
一 原始碼分析 定義陣列的初始容量。static final int default initial capacity 1 4 aka 16 定義陣列最大容量 static final int maximum capacity 1 30 定義負載因子預設值 static final float de...
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...