How to deep copy an irregular 2D array

后端 未结 7 1796
情深已故
情深已故 2020-12-04 02:06

How can I deep copy an irregularly shaped 2D array in Java?

Ie.

int[][] nums =  {{5},
                 {9,4},
                 {1,7,8},
                      


        
7条回答
  •  春和景丽
    2020-12-04 02:39

    Here's one that specializes to deeply cloning int[][]. It also allows any of the int[] to be null.

    import java.util.*;
    
    public class ArrayDeepCopy {
    
        static int[][] clone(int[][] arr) {
            final int L = arr.length;
            int[][] clone = new int[L][];
            for (int i = 0; i < clone.length; i++) {
                clone[i] = (arr[i] == null) ? null : arr[i].clone();
            }
            return clone;
        }
    
        public static void main(String[] args) {
            int[][] a = {
                { 1, },
                { 2, 3, },
                null,
            };
            int[][] b = a.clone();
            System.out.println(a[0] == b[0]); // "true", meaning shallow as expected!
    
            b = clone(a); // this is deep clone!
            System.out.println(Arrays.deepEquals(a, b)); // "true"
            System.out.println(a[0] == b[0]); // "false", no longer shallow!
        }
    }
    

提交回复
热议问题