当前位置 博文首页 > 是琳琳呀!的博客:Java数组拷贝的四种方法

    是琳琳呀!的博客:Java数组拷贝的四种方法

    作者:[db:作者] 时间:2021-08-27 18:39

    数组的拷贝
    数组的拷贝共有4种方法:
    for循环 clone() System.arraycopy() Arrays.copyof()
    1:for循环:

    --拷贝数值类型:
    int[] array1 = {1,2,3};
     int[] array2 = new int[3]; 
    for (int i = 0; i < array1.length; i++) {
     array2[i] = array1[i]; 
    }
     System.out.println("拷贝数值类型:");
     System.out.println(Arrays.toString(array1)); 
    System.out.println(Arrays.toString(array2));
     System.out.println("--------------修改后--------------------");
            array2[0] = 6;
            System.out.println(Arrays.toString(array1));
            System.out.println(Arrays.toString(array2));
    --拷贝引用
    public class Arraycopy {
        public static void main(String[] args) {
            TestArray[] arrays1 = new TestArray[4];
            arrays1[0] = new TestArray(1);
            arrays1[1] = new TestArray(2);
            TestArray[] arrays2 = new TestArray[2];
            for (int i = 0; i < arrays.length; i++) {
                arrays2[i] = arrays1[i];
            }
            System.out.println("拷贝引用类型:");
            show(arrays1);
            show(arrays2);
            System.out.println("--------------修改后--------------");
            arrays2[1].setData(3);
            show(arrays1);
            show(arrays2);
       }
        public static void show(TestArray[] arrays) {
            for (int i = 0; i < arrays.length; i++) {
                System.out.print(arrays1[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;
        }
    }
    

    2:clone()

    --拷贝数值类型:
    int[] array1 = {1,2,3,4};
            int[] array2 = new int[4];
            array2 = array1.clone();
            System.out.println("拷贝数值类型:");
            System.out.println(Arrays.toString(array1));
            System.out.println(Arrays.toString(array2));
            System.out.println("--------------修改后--------------------");
            array2[0] = 0;
            System.out.println(Arrays.toString(array1));
            System.out.println(Arrays.toString(array2));
    --拷贝引用
    TestArray[] arrays1 = new TestArray[4];
            arrays1[0] = new TestArray(1);
            arrays1[1] = new TestArray(2);
            arrays1[2] = new TestArray(3);
            arrays1[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(arrays1);
            show(arrays2);
    

    3:System.arraycopy()

    --拷贝数值类型
    	 int[] array1 = {1,2,3,4,5};
            int[] array2 = new int[5];
            System.arraycopy(array1,0,array2,0,array1.length);
            System.out.println("拷贝数值类型:");
            System.out.println(Arrays.toString(array1));
            System.out.println(Arrays.toString(array2));
            System.out.println("--------------修改后--------------------");
            array2[0] = 0;
            System.out.println(Arrays.toString(array1));
            System.out.println(Arrays.toString(array2));
    --拷贝引用
             TestArray[] arrays2 = new TestArray[arrays.length];
     System.arraycopy(arrays,0,arrays2,0,arrays.length);
    

    4.Arrays.copyof():

    --拷贝数值类型
           int[] array1 = {1,2,3,4,5,6};
            int[] array2 = new int[6];
            array2 = Arrays.copyOf(array1,array1.length);
    --拷贝引用
    TestArray[] arrays2 = new TestArray[4];
            arrays2 = Arrays.copyOf(arrays1,arrays1.length);
    

    二维数组的拷贝也是相同的方法,只要在每种方式的拷贝前加for循环(for (int i = 0; i < arrays.length; i++) )即可。

    cs