首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >集合在数组列表的副本上排序(以保持原始顺序)

集合在数组列表的副本上排序(以保持原始顺序)
EN

Stack Overflow用户
提问于 2017-01-04 21:24:24
回答 5查看 4.1K关注 0票数 1

如果我有一个数组列表,并且我既想要它的排序版本,又想要它的未排序版本,我如何才能实现它。

尝试使用集合

代码语言:javascript
运行
复制
ArrayList<Integer> someNumbers = new ArrayList<>();

如果我创建了一个新的arraylist = someNumbers并对其进行排序。原来的也被排序了吗?

代码语言:javascript
运行
复制
ArrayList<Integer> sortedNumbers = someNumbers;
Collections.sort(sortedNumbers);

这两个列表都会排序。

我如何才能简单地实现我想要做的事情呢?(得到一份排序好的副本,并保持原始文档的顺序)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-01-04 21:27:10

执行ArrayList<Integer> sortedNumbers = someNumbers;时,您不会创建要排序的新列表。基本上,您将变量sortedNumbers分配给与someNumbers所分配到的列表完全相同的列表。

要修复此问题,您可以从其他列表创建一个新列表。如下所示:

代码语言:javascript
运行
复制
ArrayList<Integer> sortedNumbers = new ArrayList<>(someNumbers);
票数 12
EN

Stack Overflow用户

发布于 2017-01-04 21:26:55

你需要复制一份列表,然后对其进行排序,例如

代码语言:javascript
运行
复制
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)构造函数

票数 3
EN

Stack Overflow用户

发布于 2017-01-04 21:29:28

两个列表都排序的原因是,即使您首先创建一个new ArrayList(),然后使用对someNumbers的引用覆盖此实例。因此,当您对sortedNumbers进行排序时,实际上是对原始列表someNumbers进行排序。

有几种方法可以实现你的目标:

代码语言:javascript
运行
复制
ArrayList<Integer> sortedNumbers = new ArrayList<>();
sortedNumbers.addAll(someNumbers);

或者,您可以通过使用复制构造函数在一步中完成相同的操作:

代码语言:javascript
运行
复制
ArrayList<Integer> sortedNumbers = new ArrayList<>(someNumbers);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41464907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档