Java:如何制作对象数组的副本?
现在,我有一个点对象数组,我想对该数组进行复制
我尝试过以下方法:
1)Point[] temp = mypointarray;
2)Point[] temp = (Point[]) mypointarray.clone();
(三)
Point[] temp = new Point[mypointarray.length];
System.arraycopy(mypointarray, 0, temp, 0, mypointarray.length);
但所有这些方法都证明,只为temp创建mypointarray的引用,而不是副本
例如,当我将mypointarray[0]的x坐标更改为1(原始值为0)时,temp[0]的x坐标也更改为1(我发誓我没有触摸temp)
那么有什么方法可以复制点阵列呢
谢谢
# 1 楼答案
你需要做一份深度拷贝。这没有内置的实用程序,但很简单。如果
Point
有一个复制构造函数,您可以这样做:这允许空数组元素
使用Java 8,您可以更紧凑地使用流执行此操作:
如果您保证
mypointarray
的任何元素都是null
,那么它可以更加紧凑,因为您可以消除null
测试并使用Point::new
而不是为map()
编写自己的lambda:# 2 楼答案
您可以使用
Arrays
实用程序类:# 3 楼答案
您必须自己创建所有点实例的副本
只要您的Point类是可序列化的,就可以对该数组进行序列化+反序列化以获得快速深度拷贝