我有一个ArrayList。如何用相同的数据示例化一个新的List,但是要经过排序?我想到了以下几点:1.使用ArrayList复制构造函数,然后使用Collections.sort1.使用TreeSet对于选项(1),复制元素并 * 然后 * 排序会有额外的开销。对于选项(2),将删除重复项。最好的办法是什么?
ArrayList
List
Collections.sort
TreeSet
g9icjywg1#
如果您可以使用第三方库,那么使用Guava,这只是
List<Foo> sortedCopy = Ordering.from(comparator).sortedCopy(list);
(披露:我为Guava做贡献。)
vc9ivgsu2#
“最佳方式”取决于您的要求:是否删除重复项?请使用TreeSet;你想保留重复的吗?2复制,然后排序。3试图从两个中得到最快的一个是不成熟的优化。
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));
i7uaboj44#
不要使用Treeset来获取List的排序副本,它会删除重复项(除非这是所需的,但这与创建List的新排序副本是不同的问题)。使用选项1 -创建一个新的List并在其上调用Collections.sort(),如果需要,还可以使用您自己的Comparator。
Treeset
Collections.sort()
Comparator
4条答案
按热度按时间g9icjywg1#
如果您可以使用第三方库,那么使用Guava,这只是
(披露:我为Guava做贡献。)
vc9ivgsu2#
“最佳方式”取决于您的要求:是否删除重复项?请使用
TreeSet
;你想保留重复的吗?2复制,然后排序。3试图从两个中得到最快的一个是不成熟的优化。ux6nzvsh3#
在Java 8中,您可以使用流:
但是,上面的列表不能被改变。如果你想改变,你可以收集为一个
ArrayList
:i7uaboj44#
不要使用
Treeset
来获取List
的排序副本,它会删除重复项(除非这是所需的,但这与创建List
的新排序副本是不同的问题)。使用选项1 -创建一个新的
List
并在其上调用Collections.sort()
,如果需要,还可以使用您自己的Comparator
。