第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

如何在Java中對2d數(shù)組進(jìn)行深度復(fù)制?

如何在Java中對2d數(shù)組進(jìn)行深度復(fù)制?

米脂 2019-06-20 15:48:23
如何在Java中對2d數(shù)組進(jìn)行深度復(fù)制?我只是因?yàn)橛?clone()在我的2dboolean認(rèn)為這是一個(gè)很深的拷貝。如何執(zhí)行boolean[][]陣列?我應(yīng)該循環(huán)一下然后做一系列的System.arraycopy是什么?
查看完整描述

3 回答

?
四季花海

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊

是的,您應(yīng)該在2D布爾數(shù)組上進(jìn)行迭代,以便深入復(fù)制它。也看看java.util.Arrays#copyOf方法,如果您在Java 6上。

我建議Java 6的下一個(gè)代碼:

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;}


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

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊

在Java 8中,可以使用lambdas作為一個(gè)一行來實(shí)現(xiàn)這一點(diǎn):

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


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

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊

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

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

這是實(shí)用方法。

@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);}

編輯:更新代碼以處理基元數(shù)組。


查看完整回答
反對 回復(fù) 2019-06-20
  • 3 回答
  • 0 關(guān)注
  • 777 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號