我需要在多线程环境中维护对象列表。我读过关于CopyOnWriteArrayList
的内容,似乎是一个选择。问题是,我也需要对列表进行排序。我无法将Collections.sort()
用于CopyOnWriteArrayList
,因为它不支持set()
操作。我找到了几种方法来对CopyOnWriteArrayList进行排序。但从表现来看,他们看起来并不好。
我的问题:是否有替代数据结构在这种情况下会派上用场?基本上,我需要在多线程环境中保留一个排序列表。列表适配器将使用该数据结构。因此,它应该提供像" get(position)"。
这样的方法我最近阅读了另一个数据结构ConcurrentSkipListSet
。谁能解释一下它的优点和缺点是什么?它是否适合我的问题?
答案 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/。