2011-03-21 26 views

回答

1

相同的數據這意味着它克隆列表中,但的元素是不能克隆。

要複製數據,您需要遍歷列表並克隆每個項目。

List<SomeObject> newList = new ArrayList<SomeObject>(); 
for(SomeObject o : list) { 
    newList.add(o.clone()); 
} 
1

這意味着,你會得到一個新名單,但在它

1

這意味着表的副本被創建,但引用複製列表存儲指向上,原來確實堆相同的對象。創建

0

一個的ArrayList,但在列表中的對象仍然指向舊的對象

3

淺拷貝是指僅引用複製到一個新的ArrayList。也就是說,新克隆的ArrayList中引用的對象與原始ArrayList中的對象相同。

這是做這樣的事情相當於:

// shallow copy 
Object[] original = {new SomeObject(), new SomeObject(), new SomeObject()}; 
Object[] copy = new SomeObject[original.length]; 

for(int i = 0; i < original.length; ++i) 
    copy[i] = original[i]; 

現在,假設SomeObject有一個變量 「INT X」:

SomeObject obj1 = original[0]; 
SomeObject obj2 = copy[0]; 

obj1.setX(123456); 

System.out.println("obj2.x " + obj2.getX()); 

你會看到:

obj2.x 123456 

但是,如果您要將新的SomeObject添加到原始文件,它將不會而不是被複制。

original.add(new SomeObject()); 
original.size(); //4 
copy.size(); //3 
+0

如果說明對original的元素'x'的更改意味着'copy'的元素'x'被更改,但將元素添加(或刪除)到其中任何一個列表都不會反映到其他列表中列表,這將是完美的答案:) – svrist 2011-03-21 19:08:39