现在,我有一个 Point 对象数组,我想制作一个COPY该数组的。
我尝试过以下方法:
1) Point[] temp = mypointarray;
2) Point[] temp = (Point[]) mypointarray.clone();
3)
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)。
那么有什么方法可以复制Point数组吗?
Thanks
您需要进行深复制。虽然没有内置实用程序可以实现此目的,但它很简单。如果Point
有一个复制构造函数,你可以这样做:
Point[] temp = new Point[mypointarray.length];
for (int i = temp.length - 1; i >= 0; --i) {
Point p = mypointarray[i];
if (p != null) {
temp[i] = new Point(p);
}
}
这允许空数组元素。
使用 Java 8,您可以使用流更紧凑地完成此操作:
Point[] temp = Arrays.stream(mypointarray)
.map(point -> point == null ? null : new Point(point))
.toArray(Point[]::new);
如果你保证没有任何元素mypointarray
is null
,它可以更加紧凑,因为您可以消除null
测试和使用Point::new
而不是编写自己的 lambdamap()
:
Point[] temp = Arrays.stream(mypointarray).map(Point::new).toArray(Point[]::new);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)