我對java中的HashSet
和HashMap
的內部實現有點困惑。HashSet和HashMap如何在Java中工作?
這是我的理解,所以請糾正我,如果我錯了:
無論HashSet
或HashMap
允許重複的元素。
HashSet
由HashMap
支持,所以在HashSet
當我們調用.add(element)
,我們呼籲的元素有關的hashCode()
方法並在內部做了put(k,v)
到內部HashMap
,這裏的關鍵是hashCode
和值是實際的對象。因此,如果我們嘗試將相同的對象添加到Set
,它會看到hashCode
已經存在,然後用新值替換舊值。
但是,然後,當我讀HashMap
如何將我們自己的對象作爲密鑰存儲在HashMap
中時,這似乎與我不一致。 在這種情況下,我們必須重寫hashCode()
和equals()
方法,使它們相互之間是一致的,因爲,如果我們發現鍵與同hashCode
,他們會去同一個桶,然後將所有具有相同的條目區分hashCode
我們必須迭代條目列表以調用每個鍵上的方法equals()
並找到匹配項。 因此,在這種情況下,我們允許擁有相同的hashCode
,並且我們創建了一個存儲桶,其中包含與所有對象相同的列表hashCode
,但是使用HashSet
,如果我們發現已經有hashCode
,我們用舊的值替換新值值。
我有點糊塗了,可能有人澄清這對我好嗎?