Java中數組的幾種拷貝方式

1.for循環拷貝數組(深拷貝)

	int[] array=new int[] {1,2,3,4};
	int[] array1=new int[array.length];
	for(int i=0;i<array.length;i++) {
		array1[i]=array[i];
	}	
	int[][] array2=new int[][] {{1,3,2},{1,4,5},{4,2,5}};
	int[][] array3=new int[array2.length][array2[0].length];
	for(int i1=0;i1<array2.length;i1++) {
		for(int j=0;j<array2[i1].length;j++) {
			array3[i1][j]=array2[i1][j];
		}
	}
	array3[0][0] = 11;    //測試(如果修改array3的值,會不會改array2的值)
	System.out.println(Arrays.deepToString(array2));
	System.out.println(Arrays.deepToString(array3));

輸出結果:
[[1, 3, 2], [1, 4, 5], [4, 2, 5]]
[[11, 3, 2], [1, 4, 5], [4, 2, 5]]

2.Arrays.copyOf(原數組,原數組的長度)方法拷貝 (深拷貝)

    int[] array=new int[] {1,2,34,5,2};
    int[] array1=Arrays.copyOf(array, array.length);
    System.out.println(Arrays.toString(array));
    System.out.println(Arrays.toString(array1));				
   
    int[][] array2=new int[][] {{11,24,41},{1,23,4},{22,34,55}};
    int[][] array3=Arrays.copyOf(array2, array2.length);
    for(int i=0;i<array2.length;i++) {
    	 array3[i]=Arrays.copyOf(array2[i], array2[i].length);
    }	
    array3[0][0]=1;    //測試
    System.out.println(Arrays.deepToString(array2));
    System.out.println(Arrays.deepToString(array3));

輸出結果:
[1, 2, 34, 5, 2]
[1, 2, 34, 5, 2]
[[11, 24, 41], [1, 23, 4], [22, 34, 55]]
[[1, 24, 41], [1, 23, 4], [22, 34, 55]]

3.System.arraycopy(array[],起始位置, array1[], 起始位置, array1[].length)方法拷貝(深拷貝)

	int[] array=new int[] {1,23,45,2};
	int[] array1=new int[array.length];
	System.arraycopy(array, 0, array1, 0, array.length);
	System.out.println(Arrays.toString(array));
	System.out.println(Arrays.toString(array1));		
						
	int[][] array2=new int[][] {{11,24,41},{1,23,4},{22,34,55}};
	int[][] array3=new int[array2.length][array2[0].length];
	for(int i=0;i<array2.length;i++) {
		System.arraycopy(array2[i], 0, array3[i], 0, array2[i].length);		
	}
	array3[0][0]=1
	System.out.println(Arrays.deepToString(array2));
	System.out.println(Arrays.deepToString(array3));

結果:
[1, 23, 45, 2]
[1, 23, 45, 2]
[[11, 24, 41], [1, 23, 4], [22, 34, 55]]
[[1, 24, 41], [1, 23, 4], [22, 34, 55]]

4. 用.clone()方法拷貝(深拷貝)

	int[] array=new int[] {1,23,45,2};
	int[] array1=array.clone();
	array1[0]=22;
	System.out.println(Arrays.toString(array));
	
	int[][] array2=new int[][] {{11,24,41},{1,23,4},{22,34,55}};
	int[][] array3=new int[array2.length][array2[0].length];
	for(int i=0;i<array2.length;i++) {
		array3[i]=array2[i].clone();
	}
	array3[0][0]=88;
	System.out.println(Arrays.deepToString(array2));
	System.out.println(Arrays.deepToString(array3));

結果:
[1, 23, 45, 2]
[[11, 24, 41], [1, 23, 4], [22, 34, 55]]
[[88, 24, 41], [1, 23, 4], [22, 34, 55]]

**以上這些方法是java中的一些深度拷貝方法,另外Arrays中提供了一些關於數組的方法:Arrays.toString(array)用於一維數組 , Arrays.deepToString(array2)用於二維數組的打印。 **

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章