我需要在多线程环境中维护一个对象列表。我读过关于CopyOnWriteArrayList的文章,它似乎是一个不错的选择。问题是,我也需要对列表进行排序。我不能为CopyOnWriteArrayList使用Collections.sort(),因为它不支持set()操作。我找到了几种对CopyOnWriteArrayList进行排序的方法。但在性能方面,它们看起来并不好。
我的问题是:在这种情况下,有没有另一种数据结构可以派上用场?基本上,我需要在多线程环境中保存一个排序列表。列表适配器将使用该数据结构。所以,它应该提供像"get(position)“这样的方法。
我最近读到了另一个数据结构ConcurrentSkipListSet。有人能解释一下它的利弊吗?它能很好地解决我的问题吗?
发布于 2015-10-09 14:50:50
我知道您会问性能,我不确定我的方法在这方面做得有多好,但我使用的是:
List arrayList = Arrays.asList(cowArrayList.toArray());
Collections.sort(arrayList, new MyComparator());
cowArrayList.clear();
cowArrayList.addAll(arrayList);发布于 2015-01-19 18:11:31
解决方案1:如果您想在插入每个元素的过程中对列表进行排序,则可以执行二进制搜索,并每次都将元素添加到排序的位置。假设列表始终是排序的。请看一下http://www.javacreed.com/sorting-a-copyonwritearraylist/。
https://stackoverflow.com/questions/25390782
复制相似问题