【发布时间】:2015-08-09 06:42:40
【问题描述】:
我不能只修改原始列表。
这是我看到的:
List<String> l1 = new ArrayList<String>();
l1.add("Hello");
l1.add("World");
List<String> l2 = new ArrayList<String>(l1); //A new arrayList.
l2.add("Everybody");
所以我现在会有一个新列表,它是第一个列表的副本。我可以修改第二个而不改变第一个。
现在我无法理解如何做同样的事情,而是将项目添加到列表的末尾。
虽然我正在执行上述代码,并将列表添加到另一个列表。以addAll 为例。但是我到处都能看到这只是如何复制引用等等,所以如果它在一个方法中或其一个 rmi 代码中,则列表本身将不完整,它将获得对我刚刚创建的另一个列表的引用。
由于我需要为许多类型的列表执行此操作,因此不确定逐项进行是否理想。因此,如果可能的话,我需要在另一个列表的末尾添加一个列表。
【问题讨论】:
-
您想将哪些项目添加到列表的哪一端?对象列表始终只包含引用,因此您只能将引用从一个列表复制到另一个列表,如果您使用构造函数或 adall 则无关紧要
-
它复制添加的项目的引用,而不是列表的引用。您展示的方法也是如此(使用
new ArrayList<String>(l1))。 -
复制对不可变类的引用应该不是问题。
Strings 是不可变的。 -
Java 列表仅包含引用。复制堆中的对象没关系,列表仍然只保存引用