我遇到了LinkedHashSet及其包含方法的問題。 讓我把它總結給你。關於Java LinkedHashSet的問題包含方法
我有這個類C1有4個字符串屬性,它的各自的getter和setter以及eclipse默認給出的equals()和hashCode()方法。
然後我有另一個類C2具有1個屬性類型LinkedHashSet與getSet()方法來訪問它。
當我創建一個C1類(比如景物C1)的1個實例,並把它添加到C2類的一個實例C2,一切都很好...我做的:
C1 c1 = new C1("a", "b", "c", "d");
C2 c2 = new C2();
c2.getSet().add(c1);
現在,如果我設置一個不同的值到c1的第一個屬性,用適當的set方法,然後我嘗試檢查c2.getSet()是否包含元素c1 ...但它總是返回false。 但是對象的哈希碼發生了變化,集合中的哈希碼也相同,顯然,contains方法中的equals測試失敗...
有沒有人知道這裏發生了什麼? 什麼可能是錯的? Equals和HashCode()?
由於提前, 歡呼
如果hashCode改變了,HashSet將永遠不會找到它。閱讀文檔中的警告。 – SLaks
你可以包括你的Equals和HashCode實現... –
[更改存儲在基於散列的集合中的對象的hashCode]的可能重複(http://stackoverflow.com/questions/5174233/changing-hashcode-of-object-stored -in-hash-based-collection) – Holger