我刚刚在我的2d boolean
数组上使用了.clone()
,认为这是一个深度拷贝。
如何执行boolean[][]
阵列的深度拷贝?
我是否应该遍历它并执行一系列的System.arraycopy
?
发布于 2009-10-14 07:51:07
是的,你应该遍历二维布尔数组,以便深度复制它。如果您使用的是Java6,那么还要查看java.util.Arrays#copyOf
方法。
我推荐Java 6的下一段代码:
public static boolean[][] deepCopy(boolean[][] original) {
if (original == null) {
return null;
}
final boolean[][] result = new boolean[original.length][];
for (int i = 0; i < original.length; i++) {
result[i] = Arrays.copyOf(original[i], original[i].length);
// For Java versions prior to Java 6 use the next:
// System.arraycopy(original[i], 0, result[i], 0, original[i].length);
}
return result;
}
发布于 2015-07-26 20:49:27
在Java 8中,这可以使用lambdas作为一行程序来完成:
<T> T[][] deepCopy(T[][] matrix) {
return java.util.Arrays.stream(matrix).map(el -> el.clone()).toArray($ -> matrix.clone());
}
发布于 2009-10-14 07:52:59
我是数组实用工具的粉丝。它有一个copyOf方法,可以为你做一个一维数组的深度拷贝,所以你可能想要这样的东西:
//say you have boolean[][] foo;
boolean[][] nv = new boolean[foo.length][foo[0].length];
for (int i = 0; i < nv.length; i++)
nv[i] = Arrays.copyOf(foo[i], foo[i].length);
https://stackoverflow.com/questions/1564832
复制相似问题