hashmap總結
hashset
hashset總結
三個構造方法,分別是:
public
hashmap()
public
hashmap
(int initialcapacity)
public
hashmap
(int initialcapacity,
float loadfactor)
transient node
table;
transient
int size;
transient
int modcount;
int threshold;
final
float loadfactor;
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;}
}
hashmap儲存鍵值對的過程:
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;
}
public v get
(object key)
final node
getnode
(int hash, object key)
while
((e = e.next)
!= null);}
}return null;
}
containkey方法邏輯與get類似
public
boolean
containskey
(object key)
查詢是否包含值,需要對每個值進行遍歷
public
boolean
containsvalue
(object value)}}
return
false
;
public v remove
(object key)
final node
removenode
(int hash, object key, object value,
boolean matchvalue,
boolean movable)
p = e;
}while
((e = e.next)
!= null);}
}//刪除節點,並進行調節紅黑樹平衡
if(node != null &&
(!matchvalue ||
(v = node.value)
== value ||
(value != null && value.
equals
(v))))
}return null;
}
hashset的構造方法主要就是呼叫了對應的hashmap的構造方法,如:
public
hashset()
public
hashset
(int initialcapacity)
public
hashset
(int initialcapacity,
float loadfactor)
public
hashset
(collection<
?extends
e> c)
hashset相當於只有鍵,值都是相同的固定值,值定義為
private
static
final object present =
newobject()
;
同hashmap的拓展策略
呼叫map的增加方法
public
boolean
add(e e)
呼叫map的查詢鍵的方法
public
boolean
contains
(object o)
呼叫map的刪除方法
public
boolean
remove
(object o)
迭代器返回map的迭代器
public iterator
iterator()
內部實現利用了hashmap
沒有重複元素
無序可以高效的新增、刪除元素、判斷元素是否存在,效率為 o(1)。
執行緒不安全
集合元素可以使null
HashMap底層原始碼剖析
陣列 單向鍊錶 紅黑樹 陣列 陣列每一項都是乙個鍊錶,其實就是陣列和鍊錶的結合體 單向鍊錶 當法神hash碰撞時,首先會找到陣列對應位置,然後1.8採用尾插入法 1.7採用頭插入法 形成乙個單項鍊表結構 紅黑樹 當陣列中每項的鍊錶長度大於8時,會轉換為紅黑樹 hash碰撞 不同的key可能會產生相同...
原始碼剖析 Hashtable 原始碼剖析
hashtable同樣是基於雜湊表實現的,同樣每個元素都是key value對,其內部也是通過單鏈表解決衝突問題,容量不足 超過了閾值 時,同樣會自動增長。hashtable也是jdk1.0引入的類,是執行緒安全的,能用於多執行緒環境中。hashtable同樣實現了serializable介面,它支...
HashMap原始碼系列 HashMap的屬性
public class hashmap extends abstractmap implements map,cloneable,serializable容載因子 容載因子越大,table陣列中儲存的資料越密集,碰撞的可能性就越大。容載因子越小,儲存越稀疏,碰撞的可能性就越小,不過浪費儲存空間。轉...