gpt4 book ai didi

java - 基于可变属性的 TreeSet 比较器

转载 作者:行者123 更新时间:2023-11-30 07:28:39 28 4
gpt4 key购买 nike

我的问题很简单,但我不知道如何正确解决它。我有一个 TreeSet,它使用基于实体名称的比较器。但是,我可以更改该名称。如何强制重新排序 TreeSet?

TreeSet<MyEntity> set = new TreeSet<MyEntity>(new BeanComparator("name"));
// bar < foo < xander
set.add(foo);
set.add(bar);
set.add(xander);
// resulting tree: _-foo-_
// bar xander
xander.setName("apple");

set.contains(xander); // -> false, since now neither 'foo' or 'bar' are equal to 'xander'

我应该调用一些 set.relayout() 方法吗?还是我做错了?

最佳答案

如果在更改元素名称时有指向 TreeSet 的链接,只需从集合中删除该元素,更改其名称,然后插入回来。

如果您在更新名称时没有该链接,那么我建议将其作为 MyEntity 中的私有(private)字段,并将 setName() 重写为

public class MyEntity {
private final TreeSet<MyEntity> container;

...

public void setName(final String name) {
container.remove(this);
this.name = name;
container.add(this);
}
}

但是,这种方法非常丑陋。你最好避免它。

关于java - 基于可变属性的 TreeSet 比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9007776/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com