ArrayList的排序复制结构

Jim*_*Jim 2 java sorting collections list arraylist

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

  1. 使用ArrayList复制构造函数,然后使用Collections.sort
  2. 用一个 TreeSet

对于选项(1),存在复制元素然后排序的额外开销.
对于选项(2),将删除重复项.
最好的方法是什么?

Lou*_*man 9

如果您可以使用第三方库,那么使用Guava就可以了

List<Foo> sortedCopy = Ordering.from(comparator).sortedCopy(list);
Run Code Online (Sandbox Code Playgroud)

(披露:我向番石榴捐款.)


das*_*ght 5

"最佳方式"取决于您的要求:您是否希望删除重复项?用一个TreeSet; 你想保留重复吗?复制,然后排序.试图从两者中获得最快的一个是过早优化.


Zty*_*tyx 5

在 Java 8 中,您可以使用流:

ArrayList<Integer> myArrayList = new ArrayList();
myArrayList.add(4);
myArrayList.add(6);

List<Integer> myNewSortedList = myArrayList.stream().sorted().collect(Collectors.asList());
Run Code Online (Sandbox Code Playgroud)

但是,上面的列表不能改变。如果需要,您可以改为收集ArrayList

myArrayList<Integer> myNewSortedList = myArrayList.stream().sorted().collect(Collectors.toCollection(ArrayList::new));
Run Code Online (Sandbox Code Playgroud)

  • s/asList/toList/ (3认同)