如何在Java中做2d数组的深度复制?

我只是通过在我的2d阵列上使用而得到一点,认为这是一个深度副本。.clone()boolean

如何执行阵列的深层拷贝?boolean[][]

我应该循环浏览它并做一系列的'吗?System.arraycopy


答案 1

是的,您应该迭代 2D 布尔数组以对其进行深度复制。如果您使用的是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;
}

答案 2

在Java 8中,这可以使用lambdas作为单行代码完成:

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