【发布时间】:2015-11-26 18:43:32
【问题描述】:
是否有任何内置集合,其中对象按排序顺序排序?并且在更改存储对象的字段(用于确定顺序)时,集合将自身重新排列为排序顺序。
集合的底层对象是可变的。
请参考以下示例。
Emp implements Comparable<Emp> {
Integer id;
Emp(int id) {
this.id = id;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Override
public int compareTo(Emp o) {
return this.id.compareTo(o.id);
}
}
Emp e1 = new emp(1);
Emp e2 = new emp(2);
Emp e3 = new emp(3);
Set<Emp> sortedSet = new TreeSet<Emp>();
sortedSet.add(e1);
sortedSet.add(e2);
sortedSet.add(e3);
// till now object is in sorted order
e2.setId(10);
// I need some method of the collection to make it sorted again.
我需要 sortedSet 再次按排序顺序(通过调用某些方法),并且在 e2 更改后顺序为 e1、e3、e2。
如果没有可用的内置类,请给出一些提示,以便以最小的时间复杂度有效地解决问题。
【问题讨论】:
-
不,如果您在对象已经在
Sorted{Set,Map}中时对其进行变异,则进入顺序将不会重新排列。无论如何,这基本上是不好的做法。你为什么要那个?你想达到什么目的? -
@fge 我很少有对象会在某个固定的时间间隔内改变它的状态。我必须让它们在相同的时间间隔后排序。
-
然后将它们放入
List并在需要时使用Collections.sort() -
@fge 是的,这肯定会使其排序,但我正在寻找一些更好的方法或算法。我可以实现任何算法。
-
如你所愿,但为什么不选择一些行之有效的东西呢?
标签: java algorithm sorting binary-search-tree treeset