Java集合中对象的可变字段

前端之家收集整理的这篇文章主要介绍了Java集合中对象的可变字段前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正确地假设,如果你有一个包含在 Java集合& (或作为关于该事物的地图中的键),用于确定身份或关系(通过hashCode(),equals(),compareTo()等)的任何字段不能改变,而不会导致未指定的行为收集操作? (编辑:在 this other question提到)

(换句话说,这些字段应该是不可变的,或者你应该要求对象从集合中删除,然后被改变,然后重新插入.)

我问的原因是我正在阅读Hibernate Annotations reference guide,它有一个例子,那里有一个HashSet&玩具>但玩具类的字段名称和序列是可变的,也用于hashCode()计算…一个红色的旗帜在我的头脑里,我只是想确保我明白它的含义.

解决方法

集合的javadoc说

Note: Great care must be exercised if
mutable objects are used as set
elements. The behavior of a set is not
specified if the value of an object is
changed in a manner that affects
equals comparisons while the object is
an element in the set. A special case
of this prohibition is that it is not
permissible for a set to contain
itself as an element.

这只是意味着您可以在一个集合中使用可变对象,甚至可以更改它们.您只需确保更改不会影响Set找到项目的方式.对于HashSet,这不需要更改用于计算hashCode()的字段.

猜你在找的Java相关文章