据我所知,当我使用为List提供的克隆方法时,或者如果我使用复制构造函数作为列表,我需要获得列表的浅表副本:
ArrayList<String> a = new ArrayList<>();
a.add(new String("dog"));
a.add(new String("cat"));
ArrayList<String> b = new ArrayList<String>(a);
//ArrayList<String> b = (ArrayList<String>)a.clone();
b.remove(0);
Iterator<String> iter = a.iterator();
while(iter.hasNext()){
System.out.println(iter.next());
}
Iterator<String> iter2 = b.iterator();
while(iter2.hasNext()){
System.out.println(iter2.next());
}
out put:
dog
cat
cat
如果b是a的浅表副本那么当我从b中删除一个元素时,它是如何从a中移除的?
答案 0 :(得分:0)
因为b
是一个单独的列表,它是通过复制a
中的项目而创建的。
它是浅拷贝的事实意味着a
内的项目没有被克隆;它们指的是相同的对象。深层复制意味着列表和列表中的项目都将被克隆。但在这两种情况下,列表本身都是克隆的,因此它们现在是两个不同的对象。