维护树设置在对象更改值时排序
2022-08-31 11:53:34
我有一个对象,它使用Compeable<>定义了“自然排序顺序”。它们存储在树集中。
除了删除并重新添加对象之外,在更新用于定义排序顺序的成员时,是否有其他方法可以更新排序?
我有一个对象,它使用Compeable<>定义了“自然排序顺序”。它们存储在树集中。
除了删除并重新添加对象之外,在更新用于定义排序顺序的成员时,是否有其他方法可以更新排序?
正如其他人所指出的那样,没有内在的方式。但是,您始终可以使用您选择的构造函数对该树集进行子类化,并添加所需的功能:
public class UpdateableTreeSet<T extends Updateable> extends TreeSet<T> {
// definition of updateable
interface Updateable{ void update(Object value); }
// constructors here
...
// 'update' method; returns false if removal fails or duplicate after update
public boolean update(T e, Object value) {
if (remove(e)) {
e.update(value);
return add(e);
} else {
return false;
}
}
}
从那时起,您将必须调用以更新排序值和排序本身。这确实要求您在数据对象中实现其他方法。((UpdateableTreeSet)mySet).update(anElement, aValue)
update()
我有一个类似的问题,找到了这个线程和tucuxi的答案(谢谢!),基于它我实现了我自己的。我的版本提供了UpdateableTreeSet
UpdateableTreeSet
向用户隐藏了很多复杂性。除了延迟的批量更新/删除之外,tucuxi 所示的单元素更新/删除在类中仍然可用。
2012-08-07 更新:该类在一个小的 GitHub 存储库中可用,包括一个带有原理图示例代码的介绍性自述文件,以及显示如何(不)更详细地使用它的单元测试。