2014-05-05 33 views
0

我知道具有相同散列碼的對象不必相同。我的問題是:如果一個哈希集遇到一個對象的哈希碼與已存在於哈希集中的對象的哈希碼相匹配,但是如果這些對象不相等,那麼哈希集是否會將新對象添加到它中?hashset在哪裏存儲一個哈希碼與已經在集合中的哈希碼相匹配的對象?

+0

我相信它只是丟棄重複,贊成原來的。但是,你是否簡單地在代碼中嘗試過它? –

+0

對象不重複;他們只有相同的哈希碼。我張貼我的代碼。 – Ankit

+0

我在我的手機上,沒有GrepCode鏈接,但實現是開源的。 – chrylis

回答

2

HashSet內部使用一個HashMap與值是常數的關鍵是設置元素。因此,行爲是相同的:如果哈希碼相同但對象不相同,則會發生collsion處理,並將對象放入已解析存儲桶的鏈接列表中。

1

是的,因爲對象實際上是不一樣

1

是的,它會添加新的對象。它不會被取代,因爲它們不相等。

2

哈希碼不需要是相同的,它只需要映射到同一個桶。 HashSet基於HashMap,所以它的行爲依賴於HashMap。

equals()返回false的兩個鍵/元素不相同。

Java中的HashMap < = 7使用相同存儲桶的鍵/元素的鏈接列表。 (不是LinkedList等)在Java 8中,它可以使用鍵/元素樹。