Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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传递到另一个ArrayList的最佳方法_Java - Fatal编程技术网

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

Java 将值从一个ArrayList传递到另一个ArrayList的最佳方法,java,Java,对于2 ArrayList,我想知道从第一个转换为第二个的“副本”的最佳方法是否是 myFirstArray.clear(); myFirstArray.addAll(mySecondArray); 或 这两种方法之间的主要区别是什么?哪种方法更可取?是否有另一种“更容易”或“更干净”的解决方案。谢谢你的提示 编辑:我使用此副本将我当前正在使用的项目数组替换为我将在下一个循环中使用的项目所在的数组。在循环结束时,我用我的futurArrayList替换我的currentArrayList,并清

对于2 ArrayList,我想知道从第一个转换为第二个的“副本”的最佳方法是否是

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

这两种方法之间的主要区别是什么?哪种方法更可取?是否有另一种“更容易”或“更干净”的解决方案。谢谢你的提示


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

第一个列表将列表的内容替换为另一个内容。第二个实例创建另一个ArrayList实例,而前一个实例保持不变

如果该列表被其他对象引用,并且希望该其他对象保持不变,请使用第二个对象。如果希望另一个对象也具有新内容,请使用第一个对象

如果列表中没有其他引用,那也没什么大不了的。第二种方法将减少使用的内存,以防用几个元素替换庞大列表的内容。

使用以下方法:

List<Object> first = ...
ArrayList<Object> second = new ArrayList<>(first);
List first=。。。
ArrayList second=新的ArrayList(第一);
我还建议您根本不要使用
clone()
。最好使用复制构造函数或某些工厂方法。看一看


当然,在您的情况下,使用
ArrayList
,它将按预期工作,最终您将获得引用的副本。

在java中,虽然克隆“旨在”生成同一对象的副本,但不能保证。 克隆人有很多缺点和缺点。所以我的第一个建议是不要依赖克隆人

默认情况下,java克隆是“逐字段复制”,即对象类不知道将调用clone()方法的类的结构。因此,当JVM被要求进行克隆时,请执行以下操作:

  • 如果类只有基元数据类型成员,则 将创建对象的新副本,并引用新副本 将返回对象副本

  • 如果类包含任何类类型的成员,则只有对象 将复制对这些成员的引用,从而复制该成员 原始对象和克隆对象中的引用 引用同一对象,因为克隆对象的更改在“原始”中也可见

  • 番石榴,番石榴,番石榴

    final List copied = ImmutableList.copyOf(originalList);
    

    如果你的列表是一堆引用类型,你可能会得到指向同一个对象的列表。只是一个样式注释:通常你的变量名应该以小写字母开头。不仅对于阅读代码的人来说,stackoverflow语法高亮显示也会变得混乱!你复制的目标是什么?知道您想要做什么将帮助我们为您提供最佳答案。由于精度高,我的Arraylist确实被另一个对象引用,因此addAll更可取。在我的情况下,仅复制引用不是一个真正的问题,因为我打算修改这些对象,因此具有相同的引用是有益的。但是谢谢你的精确性,我不想要参考副本。我想创建一个新列表并对其进行编辑。iu如何做到这一点?如果您想要列表的深度副本,则必须为列表中的每个对象创建副本。我建议您为您的对象创建一个复制构造函数,然后迭代旧的构造函数并填充新的构造函数。
    final List copied = ImmutableList.copyOf(originalList);