亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Java中對2d數組進行深度復制?

如何在Java中對2d數組進行深度復制?

米脂 2019-06-20 15:48:23
如何在Java中對2d數組進行深度復制?我只是因為用.clone()在我的2dboolean認為這是一個很深的拷貝。如何執行boolean[][]陣列?我應該循環一下然后做一系列的System.arraycopy是什么?
查看完整描述

3 回答

?
四季花海

TA貢獻1811條經驗 獲得超5個贊

是的,您應該在2D布爾數組上進行迭代,以便深入復制它。也看看java.util.Arrays#copyOf方法,如果您在Java 6上。

我建議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;}


查看完整回答
反對 回復 2019-06-20
?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

在Java 8中,可以使用lambdas作為一個一行來實現這一點:

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


查看完整回答
反對 回復 2019-06-20
?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

我已經想出了一個遞歸數組深度復制。即使對于具有不同尺寸長度的多維數組,它似乎也能很好地工作。

private static final int[][][] INT_3D_ARRAY = {
        {
                {1}
        },
        {
                {2, 3},
                {4, 5}
        },
        {
                {6, 7, 8},
                {9, 10, 11},
                {12, 13, 14}
        }};

這是實用方法。

@SuppressWarnings("unchecked")public static <T> T[] deepCopyOf(T[] array) {

    if (0 >= array.length) return array;

    return (T[]) deepCopyOf(
            array, 
            Array.newInstance(array[0].getClass(), array.length), 
            0);}private static Object deepCopyOf(Object array, Object copiedArray, int index) {

    if (index >= Array.getLength(array)) return copiedArray;

    Object element = Array.get(array, index);

    if (element.getClass().isArray()) {

        Array.set(copiedArray, index, deepCopyOf(
                element,
                Array.newInstance(
                        element.getClass().getComponentType(),
                        Array.getLength(element)),
                0));

    } else {

        Array.set(copiedArray, index, element);
    }

    return deepCopyOf(array, copiedArray, ++index);}

編輯:更新代碼以處理基元數組。


查看完整回答
反對 回復 2019-06-20
  • 3 回答
  • 0 關注
  • 769 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號