java复制数组

1.1for循环

package ztext;

import java.util.Arrays;

/**
 * @author xgj
 */
public class MyTest {
    public static void main(String[] args) {
        int[] oldArray = new int[]{1,2,3,4,5,6};
        int[] newArray = new int[oldArray.length];
        for(int index = 0 ; index < oldArray.length ; ++index){
            newArray[index] = oldArray[index];
        }
        System.out.println(Arrays.toString(oldArray));
        System.out.println(Arrays.toString(newArray));
    }
}

属于深复制,但是效率最低。

1.2System.arraycopy函数

package ztext;

import java.util.Arrays;

/**
 * @author xgj
 */
public class MyTest {
    public static void main(String[] args) {
        int[] oldArray = new int[]{1,2,3,4,5,6};
        int[] newArray = new int[oldArray.length];
        System.arraycopy(oldArray ,0,newArray,0,oldArray.length);
        System.out.println(Arrays.toString(oldArray));
        System.out.println(Arrays.toString(newArray));
    }
}

效率最高,如果复制的是一维的(int,double)这些基本类型的数组,则发生的是值传递,但是像是二维数组,修改原数组或者新数组会影响另一个的值,java中其实没有二维数组的概念,二维数组只是一个一维数组存放着一堆一维数组的引用。

1.3Arrays.copyof

package ztext;

import java.util.Arrays;

/**
 * @author xgj
 */
public class MyTest {
    public static void main(String[] args) {
        Integer[] oldArray = new Integer[]{1,2,3,4,5,6};
        Integer[] newArray =  Arrays.copyOf(oldArray,oldArray.length);
        System.out.println(Arrays.toString(oldArray));
        System.out.println(Arrays.toString(newArray));
    }
}

和System.arraycopy的区别在于会创建一个新的数组,其实底层也是由System.arraycopy实现的,多了一个创建数组的过程。效率稍微比System.arraycopy慢点。

1.4clone()方法

java.lang.Object类的clone()方法为protected类型,不可直接调用,需要先对要克隆的类进行下列操作: 首先被克隆的类实现Cloneable接口;然后在该类中覆盖clone()方法,并且在该clone()方法中调用super.clone();这样,super.clone()便可以调用java.lang.Object类的clone()方法。 (java自带类直接使用)

package ztext;

import java.util.Arrays;

/**
 * @author xgj
 */
public class MyTest {
    public static void main(String[] args) {
        Integer[] oldArray = new Integer[]{1,2,3,4,5,6};
        Integer[] newArray = oldArray.clone();
        System.out.println(Arrays.toString(oldArray));
        System.out.println(Arrays.toString(newArray));
    }
}

继承自java.lang.Object类的clone()方法是浅复制, 在编写程序时要注意这个细节。可以自己覆盖该方法实现深复制。

posted @ 2020-07-22 15:53  大嘤熊  阅读(184)  评论(0编辑  收藏  举报