如何在Java中对2d数组进行深度复制?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (76)

我只是.clone()在我的2d boolean阵列上使用,认为这是一个深层复制。

如何执行boolean[][]阵列?

我应该循环后做一系列的System.arraycopy吗?

提问于
用户回答回答于

你应该在2Dboolean数组上进行迭代,以便深入复制它。如果你使用Java 6,可以看一下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;
}
用户回答回答于

在Java 8中,可以使用lambdas作为一个一行来实现这一点:

<T> T[][] deepCopy(T[][] matrix) {
    return java.util.Arrays.stream(matrix).map(el -> el.clone()).toArray($ -> matrix.clone());
}

扫码关注云+社区

领取腾讯云代金券