我正确的假设,如果你有一个对象包含在一个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