2015-12-14 17 views
2

這是一個非常基本的問題,以便更好地理解​​行爲,當equals()方法未被覆蓋時。等於NOT覆蓋時的Java Hashset行爲?

首先,我創建了Employee類,並且覆蓋了它的hashcode(),使得它每次都會返回int 1。 (以確保碰撞)。 接下來在主要方法中,我創建了4/5個員工對象並將其推入hashset。現在,當我遍歷hashset時,我可以看到所有插入的對象。任何人都可以請解釋這種行爲,特別是如何在這裏發生鏈(請記住我沒有重寫平等的方法)?

回答

0

當你沒有覆蓋equalsObject.equals的默認實現剛剛檢查引用相等:具有獨立new調用創建了兩個不同的對象始終是不同的(即使他們的內容是一樣的)。所以難怪你看到插入的所有對象。但即使您創建了兩個具有相同內容的對象,它們也會被插入。

已經嚴重分散hashCode隻影響性能有效地將您的地圖爲鏈表(除非鍵Comparable和你使用的是Java-8:在這種情況下,它會轉化爲更多的東西類似於TreeSet)。