當我克隆一個數組列表時,我是否真的獲得了複製的數據?該API說淺拷貝,但我不知道這是什麼意思。克隆一個ArrayList會給我帶來什麼?
0
A
回答
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
相關問題
- 1. 克隆ArrayList
- 2. 從一個ArrayList到另一個ArrayList的Java克隆項目?
- 3. 克隆新的對象傳遞給ArrayList?
- 4. 我git克隆,現在什麼?
- 5. 爲什麼我們必須將克隆分配給新變量?
- 6. ArrayList:只克隆一些項目
- 7. java ArrayList克隆幾次
- 8. Java arraylist副本 - 克隆?
- 9. 爲什麼這會給我一個IndexError?
- 10. Mercurial - 克隆克隆另一個回購
- 11. 使用RESTful網址會給我帶來什麼?
- 12. 爲什麼克隆repo會破壞我的yii2應用程序?
- 13. 我需要做什麼來製作github repo的克隆
- 14. 爲什麼使用克隆()?
- 15. 超級克隆做什麼?
- 16. jQuery Loop?克隆?爲什麼?
- 17. 爲什麼PHP類克隆
- 18. jquery克隆多個實例爲什麼
- 19. 使用包來克隆一個對象?
- 20. 每次克隆時給克隆元素一個唯一的數字ID名稱
- 21. 克隆git存儲庫會創建一個子目錄,並將其克隆到 - 爲什麼?
- 22. 克隆一個類
- 23. 如何使用http來克隆克隆?
- 24. 什麼是克隆方法和實例分配給另一個直接
- 25. 什麼時候Perl 6數組克隆不是克隆?
- 26. 爲什麼混帳克隆--recursive克隆分離子模塊
- 27. 我需要做一個Git克隆嗎?
- 28. 我需要克隆一個列表
- 29. phpstorm SSH不會給我帶來下一個按鈕
- 30. 爲什麼這個模數運算符給我帶來麻煩?
如果說明對original的元素'x'的更改意味着'copy'的元素'x'被更改,但將元素添加(或刪除)到其中任何一個列表都不會反映到其他列表中列表,這將是完美的答案:) – svrist 2011-03-21 19:08:39