我正確的假設,如果你有一個對象包含在一個Java集<>(或作爲一個關鍵在地圖<>這個問題),任何領域是用於確定身份或關係(通過hashCode()
,equals()
,compareTo()
等)不能在沒有對採集造成不確定的行爲進行操作改變了嗎? (編輯:作爲暗示在this other question)可變字段的對象在Java集
(換句話說,這些領域要麼是不可變的,或者如果您需要將對象從集合中刪除,然後改,然後重新插入。)
的我想問的原因是我正在閱讀Hibernate Annotations reference guide,它有一個例子,其中HashSet<Toy>
但Toy
類的字段name
和serial
是可變的,也用於計算hashCode()
......紅旗在我的頭和我只是想確保我理解它的含義。
等等,我只是意識到這是一個非常糟糕的例子。由於我仍然持有該引用,所以最後的contains()實際上將返回true。 HashMaps是另一回事,但它幾乎是在三天的週末上放棄時間,我不想挖掘一個例子。 – 2009-07-02 21:33:30