1. 程式人生 > >陣列的四種拷貝方式

陣列的四種拷貝方式


陣列的拷貝方式有四種,分別是:
for迴圈    clone()   System.arraycopy()    Arrays.copyof()

一維陣列

for迴圈

拷貝數值型別

	int[] array = {1,2,3,4,5,6};
        int[] array2 = new int[6];
        for (int i = 0; i < array.length; i++) {
            array2[i] = array[i];
        }
        System.out.println("拷貝數值型別:")
; System.out.println(Arrays.toString(array)); System.out.println(Arrays.toString(array2)); System.out.println("--------------修改後--------------------"); array2[0] = 0; System.out.println(Arrays.toString(array)); System.out.println(Arrays.toString(array2))
;

下面是執行結果:
在這裡插入圖片描述

拷貝引用型別

public class Arraycopy {
    public static void main(String[] args) {
        TestArray[] arrays = new TestArray[4];
        arrays[0] = new TestArray(1);
        arrays[1] = new TestArray(2);
        arrays[2] = new TestArray(3);
        arrays[3] = new TestArray(4);
        TestArray[
] arrays2 = new TestArray[4]; for (int i = 0; i < arrays.length; i++) { arrays2[i] = arrays[i]; } System.out.println("拷貝引用型別:"); show(arrays); show(arrays2); System.out.println("--------------修改後--------------------"); arrays2[0].setData(0); show(arrays); show(arrays2); } public static void show(TestArray[] arrays) { for (int i = 0; i < arrays.length; i++) { System.out.print(arrays[i].getData() + " "); } System.out.println(); } } class TestArray { private int data; public TestArray(int data) { this.data = data; } public int getData() { return data; } public void setData(int data) { this.data = data; } }

在這裡插入圖片描述

clone()

拷貝數值方式

	int[] array = {1,2,3,4,5,6};
        int[] array2 = new int[6];
        array2 = array.clone();
        System.out.println("拷貝數值型別:");
        System.out.println(Arrays.toString(array));
        System.out.println(Arrays.toString(array2));
        System.out.println("--------------修改後--------------------");
        array2[0] = 0;
        System.out.println(Arrays.toString(array));
        System.out.println(Arrays.toString(array2));

在這裡插入圖片描述

拷貝引用型別

	TestArray[] arrays = new TestArray[4];
        arrays[0] = new TestArray(1);
        arrays[1] = new TestArray(2);
        arrays[2] = new TestArray(3);
        arrays[3] = new TestArray(4);
        TestArray[] arrays2 = new TestArray[4];
        arrays2 = arrays.clone();
        System.out.println("拷貝引用型別:");
        show(arrays);
        show(arrays2);
        System.out.println("--------------修改後--------------------");
        arrays2[0].setData(0);
        show(arrays);
        show(arrays2);

在這裡插入圖片描述

System.arraycopy()

拷貝數值型別

	int[] array = {1,2,3,4,5,6};
        int[] array2 = new int[6];
        System.arraycopy(array,0,array2,0,array.length);
        System.out.println("拷貝數值型別:");
        System.out.println(Arrays.toString(array));
        System.out.println(Arrays.toString(array2));
        System.out.println("--------------修改後--------------------");
        array2[0] = 0;
        System.out.println(Arrays.toString(array));
        System.out.println(Arrays.toString(array2));

在這裡插入圖片描述

拷貝引用型別

	TestArray[] arrays = new TestArray[4];
        arrays[0] = new TestArray(1);
        arrays[1] = new TestArray(2);
        arrays[2] = new TestArray(3);
        arrays[3] = new TestArray(4);
        TestArray[] arrays2 = new TestArray[arrays.length];
        System.arraycopy(arrays,0,arrays2,0,arrays.length);
        arrays2 = arrays.clone();
        System.out.println("拷貝引用型別:");
        show(arrays);
        show(arrays2);
        System.out.println("--------------修改後--------------------");
        arrays2[0].setData(0);
        show(arrays);
        show(arrays2);

在這裡插入圖片描述

Arrays.copyof()

拷貝數值型別

	int[] array = {1,2,3,4,5,6};
        int[] array2 = new int[6];
        array2 = Arrays.copyOf(array,array.length);
        System.out.println("拷貝數值型別:");
        System.out.println(Arrays.toString(array));
        System.out.println(Arrays.toString(array2));
        System.out.println("--------------修改後--------------------");
        array2[0] = 0;
        System.out.println(Arrays.toString(array));
        System.out.println(Arrays.toString(array2));

在這裡插入圖片描述

拷貝引用型別

	TestArray[] arrays = new TestArray[4];
        arrays[0] = new TestArray(1);
        arrays[1] = new TestArray(2);
        arrays[2] = new TestArray(3);
        arrays[3] = new TestArray(4);
        TestArray[] arrays2 = new TestArray[4];
        arrays2 = Arrays.copyOf(arrays,arrays.length);
        System.out.println("拷貝引用型別:");
        show(arrays);
        show(arrays2);
        System.out.println("--------------修改後--------------------");
        arrays2[0].setData(0);
        show(arrays);
        show(arrays2);

在這裡插入圖片描述

二維陣列

for迴圈

拷貝數值型別

	int[][] array = {{1,2,3},{4,5,6}};
        int[][] array2 = new int[2][3];
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                array2[i][j] = array[i][j];
            }
        }
        System.out.println("拷貝數值型別:");
        System.out.println(Arrays.deepToString(array));
        System.out.println(Arrays.deepToString(array2));
        System.out.println("--------------修改後--------------------");
        array2[0][0] = 0;
        System.out.println(Arrays.deepToString(array));
        System.out.println(Arrays.deepToString(array2));

在這裡插入圖片描述

拷貝引用型別

public class TwoArrayCopy {
    public static void main(String[] args) {
        TestArray[][] arrays = new TestArray[2][2];
        arrays[0][0] = new TestArray(1);
        arrays[0][1] = new TestArray(2);
        arrays[1][0] = new TestArray(3);
        arrays[1][1] = new TestArray(4);
        TestArray[][] arrays2 = new TestArray[2][2];
        for (int i = 0; i < arrays.length; i++) {
            for (int j = 0; j < arrays[i].length; j++) {
                arrays2[i][j] = arrays[i][j];
            }
        }
        System.out.println("拷貝引用型別:");
        show(arrays);
        show(arrays2);
        System.out.println("--------------修改後--------------------");
        arrays2[0][0].setData(0);
        show(arrays);
        show(arrays2);

    }
    public static void show(TestArray[][] arrays) {
        for (int i = 0; i < arrays.length; i++) {
            for (int j = 0; j < arrays[i].length; j++) {
                System.out.print(arrays[i][j].getData() + " ");
            }
            System.out.println();
        }
    }
}
class TestArray {
    private int data;

    public TestArray(int data) {
        this.data = data;
    }

    public int getData() {
        return data;
    }

    public void setData(int data) {
        this.data = data;
    }
}

在這裡插入圖片描述

clone()

拷貝數值型別

	int[][] array = {{1,2,3},{4,5,6}};
        int[][] array2 = new int[2][3];
        for (int i = 0; i < array.length; i++) {
            array2[i] = array[i].clone();
        }
        System.out.println("拷貝數值型別:");
        System.out.println(Arrays.deepToString(array));
        System.out.println(Arrays.deepToString(array2));
        System.out.println("--------------修改後--------------------");
        array2[0][0] = 0;
        System.out.println(Arrays.deepToString(array));
        System.out.println(Arrays