我在java中使用List时遇到了麻烦。
我创建了一个名为 A 的对象列表,然后我创建了另一个名为&#34; B&#34;的列表,我将 A 分配给 B < /强>
但如果我使用 A.clear(),那么B也会清除:
示例:
List<String> original = new ArrayList<String>();
original.add("Test");
List<String> copy = new ArrayList<String>();
original.clear();
- &GT;有没有办法保持 B 的价值,即使 A 被清除了?
答案 0 :(得分:2)
当您将一个列表设置为等于另一个列表时,Java实际上使它们等于内存中的相同List对象,而不是将所有值从一个列表复制到另一个列表。这使得两个对象连接起来,而不是具有两个具有相同值的单独对象。
实现此目的的一个好方法是在创建对象时将一个列表传递给另一个列表,或者调用构造函数。这将执行从一个对象到另一个对象的所有值的副本。
所以你的代码如下所示:
List<String> original = new ArrayList<String>();
original.add("Test");
List<String> copy = new ArrayList<String>(original);
original.clear();
问候。
答案 1 :(得分:1)
您必须复制原始列表。例如,使用接受Collection的构造函数。
List<String> copy = new ArrayList<String>(original);
下面的代码打印“A”
List<String> org = new ArrayList<String>();
org.add("A");
List<String> copy = new ArrayList<String>(org);
copy.add("B");
copy.clear();
System.out.println(org);
请记住,它只是列表的浅表副本。这对List来说已经足够了,但是如果你的列表包含可变对象,你应该创建列表的深层副本。