ArrayList <HeavyOjbect> clone()

Max*_*Max 0 java performance clone arraylist

我有一个关于Java中ArrayList的clone()方法的问题.

ArrayList<HeavyOjbect> original = new ArrayList<HeavyOjbect>();
original.add(new HeavyOjbect(0));
original.add(new HeavyOjbect(1));
original.add(new HeavyOjbect(2));
ArrayList<Integer> copy = original;
copy.remove(0);
Run Code Online (Sandbox Code Playgroud)

原创 - > [HeavyOjbect1,HeavyOjbect2]

copy - > [HeavyOjbect1,HeavyOjbect2]

现在使用clone()方法

ArrayList<HeavyOjbect> original = new ArrayList<HeavyOjbect>();
original.add(new HeavyOjbect(0));
original.add(new HeavyOjbect(1));
original.add(new HeavyOjbect(2));
ArrayList<Integer> copy = (ArrayList<HeavyOjbect>) original.clone();
copy.remove(0);
Run Code Online (Sandbox Code Playgroud)

原始 - > [HeavyOjbect0,HeavyOjbect1,HeavyOjbect2]

copy - > [HeavyOjbect1,HeavyOjbect2]

对 ?

但我无法弄清楚克隆的作用.它是否克隆每个HeavyObject?我的意思是如果克隆1000倍我的ArrayList,内存是否会爆炸?

编辑:所以克隆

new HeavyOjbect(0) -> @10
new HeavyOjbect(1) -> @20
new HeavyOjbect(1) -> @30

original(ref1 to @10, ref1 to @20, ref1 to @30)
copy(ref2 to @10, ref2 to @20, ref2 to @30)
Run Code Online (Sandbox Code Playgroud)

对 ?

谢谢

Bri*_*ach 6

http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#clone()

public Object clone()
返回此ArrayList实例的浅表副本.(元素本身不会被复制.)

只复制对你的引用HeavyObject ; 每个克隆ArrayList将包含对完全相同对象的引用.不会HeavyObject创建新的.

编辑添加:这是"浅"和"深"副本之间的区别.如果是深拷贝,那么每个的副本HeavyObject也会被制作出来,正如你所说的......你的记忆会爆炸.