对CopyOnWriteArrayList进行排序

时间:2014-08-19 18:45:39

标签: java android sorting data-structures

我需要在多线程环境中维护对象列表。我读过关于CopyOnWriteArrayList的内容,似乎是一个选择。问题是,我也需要对列表进行排序。我无法将Collections.sort()用于CopyOnWriteArrayList,因为它不支持set()操作。我找到了几种方法来对CopyOnWriteArrayList进行排序。但从表现来看,他们看起来并不好。

我的问题:是否有替代数据结构在这种情况下会派上用场?基本上,我需要在多线程环境中保留一个排序列表。列表适配器将使用该数据结构。因此,它应该提供像" get(position)"。

这样的方法

我最近阅读了另一个数据结构ConcurrentSkipListSet。谁能解释一下它的优点和缺点是什么?它是否适合我的问题?

2 个答案:

答案 0 :(得分:1)

我知道你问的是性能问题,我不确定我的方法对此有多好,但这就是我的用法:

List arrayList = Arrays.asList(cowArrayList.toArray());
Collections.sort(arrayList, new MyComparator());
cowArrayList.clear();
cowArrayList.addAll(arrayList);

答案 1 :(得分:-1)

解决方案1:如果要在插入每个元素期间对列表进行排序,可以进行二进制搜索,并每次在排序的位置添加元素。假设列表总是排序。请查看http://www.javacreed.com/sorting-a-copyonwritearraylist/