我需要一個java的ArrayList
的淺拷貝,我應該使用clone()
或迭代原始列表和複製的元素新的ArrayList,這是更快?ArrayList的淺拷貝迭代或克隆()
回答
使用clone()
,或者使用拷貝構造函數。
的拷貝構造使得從傳遞的集合到陣列的額外變換,而clone()
方法直接使用內部陣列。
請記住,clone()
返回Object
,所以你將不得不投入List
。
正是我看了看java.util.ArrayList的源代碼,並沒有發現克隆()使用Array.copyof,這將是更爲有效的比遍歷原數組列表。 公共對象的clone(){ 嘗試{ @SuppressWarnings( 「未登記」) ArrayList的
我不會太在意效率。使用clone()是一種痛苦;按照建議使用轉換構造函數。 – 2010-04-07 18:34:01
@Kevin Bourrillion爲什麼你認爲使用clone()'很痛苦?實現'clone()'是痛苦的,而不是使用它。 – Bozho 2010-04-07 19:08:54
無需重複:
List original = ...
List shallowCopy = new ArrayList(original);
http://java.sun.com/javase/6/docs/api/java/util/ArrayList.html#ArrayList%28java.util.Collection%29
@ Michael ..謝謝。我檢查了複製構造函數的代碼。它有額外的步驟來返回Bozho提到的複製內部數組結構。 public ArrayList(Collection extends E> c){ elementData = c.toArray(); size = elementData.length;如果(elementData.getClass()!= Object []。class) elementData = Arrays.copyOf(elementData,size,Object []。class); } – tech20nn 2010-04-07 14:28:28
我喜歡通用的「我應該優化嗎?」思維模式 – 2016-01-05 15:51:03
問題說shallowcopy不直接deepcopy.Copying從一個ArrayList中提到的另一個參考還將努力right.Deep副本複印件包括個人元素在arraylist中。
ArrayList<Integer> list=new ArrayList<Integer>();
list.add(3);
ArrayList<Integer> list1=list; //shallow copy...
這裏有什麼問題嗎?
這是錯誤的。 所有這些都會使內存中有兩個指向物理ArrayList對象的指針。向一個列表中添加一個「Integer」使得「Integer」也出現在另一個列表中。這不是我們想要的。 淺拷貝使底層對象共享相同的內存空間,但列表具有單獨的內存空間。所以如果你修改一個'Integer',它將在這兩個列表中被修改。但是如果你將一個Integer加入到一個列表中,它不會出現在另一個列表中。 深度複製不會在其他列表中反映任何更改。 – Antimonit 2014-11-22 13:51:18
- 1. Java的克隆 - 深拷貝和淺拷貝
- 2. 淺拷貝或深拷貝?
- 3. Python的拷貝或克隆defaultdict變量
- 4. Java ArrayList的拷貝構造函數是淺拷貝還是深拷貝?
- 5. 淺拷貝
- 6. Javascript淺拷貝
- 7. java克隆深拷貝HashMap
- 8. 半拷貝/克隆構造
- 9. 對象克隆淺拷貝不會改變變量
- 10. 淺拷貝和深拷貝在C
- 11. 硬拷貝vs淺拷貝javascript
- 12. 淺拷貝和深拷貝示例
- 13. pugixml「克隆」中的「xml_document」的深拷貝
- 14. 混淆hashtable的淺拷貝
- 15. 散列集的淺拷貝
- 16. 的JavaScript - 淺拷貝問題
- 17. std :: map的淺/深拷貝
- 18. Java中的淺拷貝
- 19. 矢量STD C++ - 深或淺拷貝
- 20. 如何克隆(深層拷貝)java linkList
- 21. 淺克隆之後淺拉
- 22. 淺取和淺克隆
- 23. 通過使淺拷貝
- 24. structDelete不影響淺拷貝?
- 25. 未能淺拷貝對象
- 26. 方法Array.Clone是淺拷貝?
- 27. 淺拷貝與向量
- 28. 從繼承類淺拷貝
- 29. 淺拷貝與基元
- 30. 爲什麼懶的拷貝時我們有深拷貝和淺拷貝?
在輸入問題時,您應該已經看到相關問題的列表已經彈出(與您在本頁右下欄中看到的列表相同)。你在他們周圍偷看了嗎?爲什麼這些答案不夠?請詳細說明。 – BalusC 2010-04-07 13:56:41
我確實去了彈出。在ArrayList迭代器和clone()方面沒有任何關係。 – tech20nn 2010-04-07 14:13:38