Jas*_*n S 11 java collections identity mutable
我在假设,如果你有一个包含一个Java集<>内(或在地图<>对于这个问题的关键)的对象,所使用的任何字段,以确定身份或关系(通过纠正hashCode(),equals(),compareTo()等.)如果不对集合上的操作造成未指定的行为,则无法更改?(编辑:在其他问题中提到)
(换句话说,这些字段应该是不可变的,或者您应该要求从集合中删除对象,然后更改,然后重新插入.)
我问的原因是我正在阅读Hibernate Annotations参考指南,它有一个例子,其中有一个HashSet<Toy>但是Toy类有字段name并且serial是可变的并且也用于hashCode()计算......一个红旗在我脑海中消失了我只想确保理解它的含义.
javadoc Set说道
注意:如果将可变对象用作set元素,则必须非常小心.如果在对象是集合中的元素的同时以影响等于比较的方式更改对象的值,则不指定集合的行为.这种禁令的一个特例是,不允许集合将自身作为一个要素包含在内.
这只是意味着您可以在集合中使用可变对象,甚至可以更改它们.您应该确保更改不会影响Set查找项目的方式.因为HashSet,这将不需要更改用于计算的字段hashCode().
| 归档时间: |
|
| 查看次数: |
4562 次 |
| 最近记录: |