【发布时间】:2011-11-15 08:28:48
【问题描述】:
我正在使用 ConcurrentSkipListSet,它显然是通过多个线程访问的。现在,底层对象的 compareTo 方法使用的值随时间变化。因此,我想“更新”列表的顺序(通过使用它或类似的方法)。
但是,java.util.Collections.sort(list) 不起作用,并且仅仅重建列表可能太慢(并且会弄乱整个并发证明)。我应该看看其他解决方案吗?
它不一定会导致最佳排序(这在并发和更改值的情况下几乎是不可能的)。只要任何删除/添加调用保持线程证明(在排序时重建列表时这将是一个真正的问题),接近最优就足够了。
【问题讨论】:
-
有趣的问题,但很难推断出任何正常的故事!什么场景,为什么是比较运算符变量?知道这一点后,可能会出现一种完全不同的方法。
-
@Will 听起来元素是可变的。
-
一个对象在数据结构中的位置从它的位置开始排序。要改变它的位置,你必须改变结构。
-
我会考虑重构你的集合,这样对象就不会改变。这意味着使用多个集合,因此一个集合中的元素可以相对于另一个集合中的元素“移动”。
标签: java list sorting concurrency