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