首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中创建一个2d数组的深度副本?

如何在Java中创建一个2d数组的深度副本?
EN

Stack Overflow用户
提问于 2009-10-14 07:46:09
回答 6查看 84.8K关注 0票数 62

我刚刚在我的2d boolean数组上使用了.clone(),认为这是一个深度拷贝。

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

我是否应该遍历它并执行一系列的System.arraycopy

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-10-14 07:51:07

是的,你应该遍历二维布尔数组,以便深度复制它。如果您使用的是Java6,那么还要查看java.util.Arrays#copyOf方法。

我推荐Java 6的下一段代码:

代码语言:javascript
复制
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;
}
票数 65
EN

Stack Overflow用户

发布于 2015-07-26 20:49:27

在Java 8中,这可以使用lambdas作为一行程序来完成:

代码语言:javascript
复制
<T> T[][] deepCopy(T[][] matrix) {
    return java.util.Arrays.stream(matrix).map(el -> el.clone()).toArray($ -> matrix.clone());
}
票数 23
EN

Stack Overflow用户

发布于 2009-10-14 07:52:59

我是数组实用工具的粉丝。它有一个copyOf方法,可以为你做一个一维数组的深度拷贝,所以你可能想要这样的东西:

代码语言:javascript
复制
//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);
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1564832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档