Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList的排序副本构造_Java_List_Sorting_Collections_Arraylist - Fatal编程技术网

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
  • 对于选项(1),复制元素然后进行排序会产生额外的开销。
    对于选项(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));