![](/img/trans.png)
[英]Best way to remove one arraylist elements from another 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调用克隆时,请做以下事情:
如果类只有原始数据类型成员,则将创建该对象的全新副本,并返回对新对象副本的引用。
如果类包含任何类类型的成员,则只复制对这些成员的对象引用,因此原始对象和克隆对象中的成员引用都引用同一对象,因为克隆对象的更改在原始对象中可见也。
番石榴,番石榴,番石榴!
final List copied = ImmutableList.copyOf(originalList);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.