基於hashmap的set介面實現。它不保證集合的迭代順序。特別是,它不能保證順序會隨著時間的推移保持恆定,當擴容時順序將調整。此類允許null元素。
-- 建立的hashmap
private
transient hashmap
map;
-- 因為底層使用hashmap實現,要存key,value,這個固定值就是所有資料的value了
private
static
final object present =
newobject()
;
-- 這裡構造方法是建立了乙個hashmap
public
hashset()
public
hashset
(int initialcapacity,
float loadfactor)
public
hashset
(int initialcapacity)
public
hashset
(collection<
?extends
e> c)
-- 給linkedhashset使用
hashset
(int initialcapacity,
float loadfactor,
boolean dummy)
-- 新增 呼叫map的put方法
public
boolean
add(e e)
public
boolean
remove
(object o)
public
void
clear()
public
boolean
isempty()
public
intsize()
-- hashset沒有提供get方法
public
boolean
contains
(object o)
-- 呼叫map的keyset迭代 更像是hashmap留下的鉤子
public iterator
iterator()
-- 重寫轉殖方法 實現深拷貝
public object clone()
catch
(clonenotsupportedexception e)
}
內部使用hashmap的key儲存元素,來保證資料不重複
執行緒不安全
無序允許key為null
沒有get方法
支援快速失敗
HashSet原始碼分析總結
hashset實現set介面,由雜湊表 實際上是乙個hashmap例項 支援。它不保證set 的迭代順序 特別是它不保證該順序恆久不變。此類允許使用null元素。hashset中的元素實際上取得是hashmap節點中的key,因為hashmap中的key具有唯一性,故而hashset中的元素值不可重...
Java原始碼分析之HashSet
hashset的本質,其實就是hashmap private transient hashmapmap hashmap是鍵值對,而hashset是單值,所以需要乙個值來充當鍵值對中的值 private static final object present new object public has...
集合原始碼分析(四)HashSet集合
無序 無索引 不可以重複。a 存入集合的順序和取出集合的順序不一致 b 沒有索引 c 存入集合的元素不能重複 使用hashset集合注意點 重寫hashcode和equals方法。呼叫順序 規則 新新增到hashset集合的元素都會與集合中已有的元素一一比較。首先比較雜湊值 每個元素都會呼叫hash...