我有一个ArrayList
。
如何使用相同的数据实例化新的List
但排序?
我想到了以下几点:排序复制构造ArrayList
- 使用
ArrayList
拷贝构造函数,然后使用Collections.sort
- 使用
TreeSet
对于选项(1)有复制元素的额外开销和然后排序。
对于选项(2)重复将被删除。
这是最好的方法是什么?
我有一个ArrayList
。
如何使用相同的数据实例化新的List
但排序?
我想到了以下几点:排序复制构造ArrayList
ArrayList
拷贝构造函数,然后使用Collections.sort
TreeSet
对于选项(1)有复制元素的额外开销和然后排序。
对于选项(2)重复将被删除。
这是最好的方法是什么?
“最好的方式”取决于您的要求:你想删除重复?使用TreeSet
;你想保留重复吗?复制,然后排序。试图从两者中获得最快的是过早优化。
请勿使用Treeset
获取List
的已分类副本。它会删除重复项。 (除非这是所期望的,但是与创建List
的新分类副本是一个不同的问题)。
使用选项1 - 创建一个新的List
并调用Collections.sort()
,如果需要可能使用您自己的Comparator
。
如果你可以使用第三方库,然后用Guava这只是
List<Foo> sortedCopy = Ordering.from(comparator).sortedCopy(list);
(披露:我贡献番石榴)
在Java 8,你可以使用流:
ArrayList<Integer> myArrayList = new ArrayList();
myArrayList.add(4);
myArrayList.add(6);
List<Integer> myNewSortedList = myArrayList.stream().sorted().collect(Collectors.asList());
但是,上面的列表不得突变。如果你想,你可以代替收集作为ArrayList
:
myArrayList<Integer> myNewSortedList = myArrayList.stream().sorted().collect(Collectors.toCollection(ArrayList::new));
s/asList/toList / – Demyn
假设你想那些重复的,使用选项1,有没有更好的办法,我可以建议,除非您能向我们提供有关其包含的数据的详细信息。 – st0le