2012-10-04 47 views
2

我有一个ArrayList
如何使用相同的数据实例化新的List排序
我想到了以下几点:排序复制构造ArrayList

  1. 使用ArrayList拷贝构造函数,然后使用Collections.sort
  2. 使用TreeSet

对于选项(1)有复制元素的额外开销和然后排序。
对于选项(2)重复将被删除。
这是最好的方法是什么?

+0

假设你想那些重复的,使用选项1,有没有更好的办法,我可以建议,除非您能向我们提供有关其包含的数据的详细信息。 – st0le

回答

4

“最好的方式”取决于您的要求:你想删除重复?使用TreeSet;你想保留重复吗?复制,然后排序。试图从两者中获得最快的是过早优化。

2

请勿使用Treeset获取List的已分类副本。它会删除重复项。 (除非这是所期望的,但是与创建List的新分类副本是一个不同的问题)。

使用选项1 - 创建一个新的List并调用Collections.sort(),如果需要可能使用您自己的Comparator

7

如果你可以使用第三方库,然后用Guava这只是

List<Foo> sortedCopy = Ordering.from(comparator).sortedCopy(list); 

(披露:我贡献番石榴)

1

在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)); 
+0

s/asList/toList / – Demyn