带有可变对象的Java集合

lau*_*cer 9 java collections list mutable

当对象可变时,TreeSet,HashSet或LinkedHashSet如何表现?我无法想象它们会在任何意义上起作用吗?

如果我在添加对象后修改它; 列表的行为是什么?

是否有比链表或数组等可变对象(我需要排序/索引/等)的收集处理,只是通过他们迭代,每次一个更好的选择?

tra*_*god 4

Set接口直接解决了这个问题:“注意:如果将可变对象用作集合元素,则必须格外小心。如果对象的值以影响等于比较的方式更改,而对象的更改则不会指定集合的​​行为。是集合中的一个元素。此禁止的一个特殊情况是集合不允许将其自身包含为元素。”

附录:

是否有更好的选择来处理可变对象的集合?

当尝试决定哪种集合实现最合适时,可能值得查看核心集合接口。特别是对于Set实现,只要正确实现equals()和,任何不相关的属性都可以是可变的。hashCode()类比数据库关系,任何属性都可以改变,但主键必须是不可侵犯的。