当对象是可变的时,TreeSet、HashSet 或 LinkedHashSet 的行为如何?我无法想象它们会在任何意义上起作用吗?
如果我在添加对象后修改它;列表的行为是什么?
除了链表或数组之外,是否有更好的选择来处理可变对象的集合(我需要对其进行排序/索引/等)并且每次都简单地遍历它们?
当对象是可变的时,TreeSet、HashSet 或 LinkedHashSet 的行为如何?我无法想象它们会在任何意义上起作用吗?
如果我在添加对象后修改它;列表的行为是什么?
除了链表或数组之外,是否有更好的选择来处理可变对象的集合(我需要对其进行排序/索引/等)并且每次都简单地遍历它们?
如果对象的 hashCode 和 compare 方法的行为在插入后发生变化,那么可变性只是集合的问题。
您可以处理此问题的方法是从集合中删除对象并在进行此类更改后重新添加它们,以便对象。
从集合的角度来看,本质上这会导致一个不可变的对象。
另一种性能较低的方法可能是保留一个包含所有对象的集合,并在您需要对集合进行排序或索引时创建一个 TreeSet/HashSet。对于对象不断变化并且您需要同时访问地图的情况,这不是真正的解决方案。
处理这种情况的“最佳”方法是保留辅助数据结构以供查找,有点像数据库中的索引。然后您的所有修改都需要确保索引已更新。很好的例子是地图或多地图 - 在更新之前,从任何索引中删除条目,然后在更新之后将它们添加回新值。显然,这需要注意并发等。