HashSet原始碼分析

2021-09-29 10:16:59 字數 1456 閱讀 3950

基於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...