【Java】數組拷貝的三種方式

System.arraycopy

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);

src:原數組對象
srcPos:原數組起始位置
dest:目標數組對象
destPos:目標數組起始位置
length:複製長度

注意不要以爲src和dest是Object類型,就可以隨便傳參,不是數組對象會報錯。

該方法有一個一維數組、二維數組複製的區別,一維數組拷貝其值,二維數組拷貝引用,具體原理我將不清楚,有興趣可以運行如下代碼。


public class SystemArrayCopy {

    public static void main(String[] args) {
        int[] arr1 = {1, 2, 3};
        int[] arr2 = new int[3];

        System.arraycopy(arr1, 0, arr2, 0, arr2.length);
        for (int i = 0; i < arr2.length; i++) {
            System.out.print(arr2[i] + " ");
        }

        System.out.println();

        String[] sArr1 = {"China", "Japan", "Korea"};
        String[] sArr2 = new String[3];
        System.arraycopy(sArr1, 0, sArr2, 0, sArr2.length);
        for (int i = 0; i < sArr2.length; i++) {
            System.out.print(sArr2[i] + " ");
        }

        System.out.println();

        sArr1[0] = "USA";
        for (int i = 0; i < sArr2.length; i++) {
            System.out.print(sArr2[i] + " ");
        }

        System.out.println();

        String[][] ss1 = {{"sh", "js", "zj"}, {"bj", "tj", "hb"}, {"sc", "cq", "yn"}};
        String[][] ss2 = new String[ss1.length][ss1[0].length];
        System.arraycopy(ss1, 0, ss2, 0, ss1.length);
        for (int i = 0; i < ss2.length; i++) {
            for (int j = 0; j < ss2[i].length; j++)
                System.out.print(ss2[i][j] + " ");

            System.out.println();
        }

        System.out.println();

        ss1[0][0] = "dsh";
        for (int i = 0; i < ss2.length; i++) {
            for (int j = 0; j < ss2[i].length; j++)
                System.out.print(ss2[i][j] + " ");

            System.out.println();
        }
    }

}

Arrays.copyOf

Arrays.copyOf()重載了很多類型,以int型爲例
public static int[] copyOf(int[] original, int newLength);

original:原數組
newLength:複製長度

返回新複製的數組對象

分析Arrays的源代碼可知底層實際上是調用System.arraycopy()

Object.clone

在Java中,數組也是一種對象,所以可以使用clone()方法。

 String[] sArr1 = {"China", "Japan", "Korea"};
String[] sArr2;
sArr2 = sArr1.clone();

for (int i = 0; i < sArr2.length; i++) {
     System.out.print(sArr2[i] + " ");
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章