2
A
回答
2
無小事對象需要提供一些支持複製:即使是在實施克隆或序列化的形式。這或多或少是爲什麼沒有內置方法,並且循環是不可避免的。
如果它是所有自己的代碼,然後我會建議一個拷貝構造函數在任何克隆或序列化/反序列化,因爲這是更面向對象;您要求對象創建自己的副本,而不是讓JVM執行低級副本。這樣的代碼是非常簡單和容易,所以希望更便宜,從長遠來看,保持閱讀:
public class Widget {
private int x = 0;
public Widget(Widget copyMe){
this.x = copyMe.x;
// ...
}
// ....
}
你仍然需要當然要遍歷所有的收舊調用拷貝構造函數來填充新的收集循環。有一本名爲Effective Java的書,詳細介紹了我強烈推薦的克隆和序列化的陷阱。
有一些系統,其真正需要的非常高的速度複製和分選和等(例如Hadoop的)。這樣的系統把責任推給開發者以支持自定義的二進制格式(例如byte [] getAsBytes()/ public Widget(byte [] fromBytes))。將大量轉換爲byte []的對象打包成一個更大的數組意味着它們可以使用大數組上的System.arraycopy快速複製。 JVM將把System.arraycopy作爲低級內存拷貝。在複製之後,您仍然需要循環來反序列化字節塊中的對象。
一般來說,編譯器和jvm傾向於非常好地優化基本代碼,所以除非你真的測量出你有一個真正的可測量的性能問題,那麼一個非常簡單的循環和一個非常可讀的拷貝構造函數將是最好的長期做法。
2
相關問題
- 1. Java的淺層和深層複製JLS
- 2. 創建<Fish> arrayList深度複製
- 3. JAVA的ArrayList <Arraylist>的深拷貝
- 4. 鏈式Java深度複製?
- 5. 深度複製Java中
- 6. Java ArrayList toArray避免複製
- 7. 淺層和深層複製
- 8. QVector深複製
- 9. Java LinkedList.get()不返回深度複製?
- 10. 創建深度複製方法,Java
- 11. 深度複製,JUnit測試Java
- 12. Java圖形(結構)深度複製
- 13. 如何在Java中製作ArrayList <Integer>的深層副本?
- 14. Java ArrayList:複製構造函數和通過賦值複製的區別
- 15. 無法從Java深ArrayList中獲取值
- 16. Java的複製和
- 17. 深複製行爲
- 18. Java的重複中的ArrayList
- 19. 淺拷貝和深深的對象C複製
- 20. elisp的深度複製 - consing
- 21. Neo4j的深複製節點
- 22. 深複製的UIImage與ARC
- 23. 數據庫和深度複製
- 24. 查找一個ArrayList複製和使用Java
- 25. BeanUtils copyProperties複製Arraylist
- 26. 深層複製VS淺複製
- 27. 的Java ArrayList和類
- 28. UML,Java和ArrayList的
- 29. 複製/深度複製和變量範圍
- 30. 我怎樣才能複製和深度複製[] [] []結構
深層副本將會有某種概念循環。問題是它是否隱藏在util內部的視圖中。 – corsiKa 2010-07-20 15:52:15
Dupe? http://stackoverflow.com/questions/64036/how-do-you-make-a-deep-copy-of-an-object-in-java – 2010-07-20 15:56:26
你打算修改副本嗎? – Arkadiy 2010-07-20 15:58:15