繁体   English   中英

将值从ArrayList传输到另一个的最佳方法

[英]Best way to transfer value from an ArrayList to another

有了2个ArrayList,我想知道将第一个转换成第二个“副本”的最佳方法是

myFirstArray.clear();
myFirstArray.addAll(mySecondArray);

要么

myFirstArray = mySecondArray.clone();

这两种方法之间的主要区别是什么,哪种方法是优选的,还有另一种“更容易”或“更清洁”的解决方案。 谢谢你的任何提示

编辑:我使用此副本替换当前使用的项目数组,我将在下一个循环中存储我将使用的项目。 在循环结束时,我用我的futurArrayList替换了我的currentArrayList,并清除了我的futurArraylist以便在其中添加新项目(我希望它足够清晰)

第一个用另一个内容替换列表的内容。 第二个创建另一个ArrayList实例,保持前一个不触及。

如果列表被其他某个对象引用,并且您希望此其他对象不受影响,请使用第二个对象。 如果您希望其他对象也具有新内容,请使用第一个。

如果没有其他内容引用该列表,则无关紧要。 第二个将减少使用一些元素替换大型列表的内容时使用的内存。

使用:

List<Object> first = ...
ArrayList<Object> second = new ArrayList<>(first);

我还建议您根本不使用clone() 最好使用复制构造函数或某些工厂方法。 看看这里

当然,在你的情况下,使用ArrayList ,它将按预期工作,你将得到一个引用的副本。

在java中,尽管克隆是“打算”生成同一对象的副本,但不能保证。 克隆有很多它的和buts。 所以我的第一个建议是不依赖于克隆。

默认情况下,java克隆是“逐字段复制”,即因为Object类不知道将调用clone()方法的类的结构。 所以,当JVM调用克隆时,请做以下事情:

  1. 如果类只有原始数据类型成员,则将创建该对象的全新副本,并返回对新对象副本的引用。

  2. 如果类包含任何类类型的成员,则只复制对这些成员的对象引用,因此原始对象和克隆对象中的成员引用都引用同一对象,因为克隆对象的更改在原始对象中可见也。

番石榴,番石榴,番石榴!

final List copied = ImmutableList.copyOf(originalList);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM