java ArrayList的排序副本构造

ttcibm8c  于 2023-03-16  发布在  Java
关注(0)|答案(4)|浏览(223)

我有一个ArrayList
如何用相同的数据示例化一个新的List,但是要经过排序
我想到了以下几点:
1.使用ArrayList复制构造函数,然后使用Collections.sort
1.使用TreeSet
对于选项(1),复制元素并 * 然后 * 排序会有额外的开销。
对于选项(2),将删除重复项。
最好的办法是什么?

g9icjywg

g9icjywg1#

如果您可以使用第三方库,那么使用Guava,这只是

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

(披露:我为Guava做贡献。)

vc9ivgsu

vc9ivgsu2#

“最佳方式”取决于您的要求:是否删除重复项?请使用TreeSet;你想保留重复的吗?2复制,然后排序。3试图从两个中得到最快的一个是不成熟的优化。

ux6nzvsh

ux6nzvsh3#

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

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

List<Integer> myNewSortedList = myArrayList.stream().sorted().collect(Collectors.toList());

但是,上面的列表不能被改变。如果你想改变,你可以收集为一个ArrayList

myArrayList<Integer> myNewSortedList = myArrayList.stream().sorted().collect(Collectors.toCollection(ArrayList::new));
i7uaboj4

i7uaboj44#

不要使用Treeset来获取List的排序副本,它会删除重复项(除非这是所需的,但这与创建List的新排序副本是不同的问题)。
使用选项1 -创建一个新的List并在其上调用Collections.sort(),如果需要,还可以使用您自己的Comparator

相关问题