陣列的四種拷貝方式
阿新 • • 發佈:2018-12-22
陣列的拷貝方式有四種,分別是:
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