如果我有一个数组列表,并且我既想要它的排序版本,又想要它的未排序版本,我如何才能实现它。
尝试使用集合
ArrayList<Integer> someNumbers = new ArrayList<>();如果我创建了一个新的arraylist = someNumbers并对其进行排序。原来的也被排序了吗?
ArrayList<Integer> sortedNumbers = someNumbers;
Collections.sort(sortedNumbers);这两个列表都会排序。
我如何才能简单地实现我想要做的事情呢?(得到一份排序好的副本,并保持原始文档的顺序)
发布于 2017-01-04 21:27:10
执行ArrayList<Integer> sortedNumbers = someNumbers;时,您不会创建要排序的新列表。基本上,您将变量sortedNumbers分配给与someNumbers所分配到的列表完全相同的列表。
要修复此问题,您可以从其他列表创建一个新列表。如下所示:
ArrayList<Integer> sortedNumbers = new ArrayList<>(someNumbers);发布于 2017-01-04 21:26:55
你需要复制一份列表,然后对其进行排序,例如
ArrayList<Integer> sortedNumbers = new ArrayList<>(someNumbers);
Collections.sort(sortedNumbers);它使用ArrayList(java.util.Collection)(https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#ArrayList(java.util.Collection%29)构造函数
发布于 2017-01-04 21:29:28
两个列表都排序的原因是,即使您首先创建一个new ArrayList(),然后使用对someNumbers的引用覆盖此实例。因此,当您对sortedNumbers进行排序时,实际上是对原始列表someNumbers进行排序。
有几种方法可以实现你的目标:
ArrayList<Integer> sortedNumbers = new ArrayList<>();
sortedNumbers.addAll(someNumbers);或者,您可以通过使用复制构造函数在一步中完成相同的操作:
ArrayList<Integer> sortedNumbers = new ArrayList<>(someNumbers);https://stackoverflow.com/questions/41464907
复制相似问题