Java ArrayList的排序副本构造
我有一个Java ArrayList的排序副本构造,java,list,sorting,collections,arraylist,Java,List,Sorting,Collections,Arraylist,我有一个ArrayList 如何实例化一个新的列表,该列表具有相同的数据,但已排序? 我想到了以下几点: 使用ArrayListcopy构造函数,然后使用Collections.sort 使用TreeSet 对于选项(1),复制元素然后进行排序会产生额外的开销。 对于选项(2),将删除重复项。 最好的方法是什么 最佳方法取决于您的要求:是否要删除重复项?使用树集;你想保留副本吗?复制,然后排序。试图从这两个列表中选择最快的一个是过早的优化。不要使用树集来获取列表的排序副本。它将删除重复项。(除非
ArrayList
如何实例化一个新的
列表
,该列表具有相同的数据,但已排序?我想到了以下几点:
ArrayList
copy构造函数,然后使用Collections.sort
TreeSet
对于选项(2),将删除重复项。
最好的方法是什么 最佳方法取决于您的要求:是否要删除重复项?使用
树集
;你想保留副本吗?复制,然后排序。试图从这两个列表中选择最快的一个是过早的优化。不要使用树集来获取列表的排序副本。它将删除重复项。(除非这是所需的,但这与创建列表的新排序副本是不同的问题)
使用选项1-创建一个新的列表
并在其上调用Collections.sort()
,如果需要,还可以使用您自己的比较器。如果您可以使用第三方库,则只需使用它即可
List<Foo> sortedCopy = Ordering.from(comparator).sortedCopy(list);
List sortedCopy=Ordering.from(比较器)。sortedCopy(列表);
(披露:我为番石榴做了贡献。)在Java 8中,您可以使用流媒体:
ArrayList<Integer> myArrayList = new ArrayList();
myArrayList.add(4);
myArrayList.add(6);
List<Integer> myNewSortedList = myArrayList.stream().sorted().collect(Collectors.asList());
假设您需要这些副本,请使用选项1。我没有更好的建议,除非您能向我们提供有关它包含的数据的更多详细信息。s/asList/toList/
myArrayList<Integer> myNewSortedList = myArrayList.stream().sorted().collect(Collectors.toCollection(ArrayList::new));