Java二維陣列及其拷貝方式

2021-08-18 19:40:27 字數 2839 閱讀 9538

二維陣列定義方式:

//規則陣列

intarray=new int [2][3];//二維陣列定義

intarray1=,};

intarray3=new int,};

//不規則陣列

int array4 = new int[2];

array4[0] = new int[3];

array4[1] = new int[2];

二維陣列的遍歷方式:

使用for迴圈:

public

static

void

show1(int array)

system.out.println();}}

forreach

public

static

void

show2(int array)

system.out.println();}}

使用for迴圈可以通過改變下標來訪問不同的陣列元素

forreach只能按順序來訪問陣列中的每乙個元素。

int array = ,};

int array2 = new

int[2][3];

此時是把array的位址給了array2,倆者指向同一塊記憶體,所以,當其中乙個陣列的某個元素改變時,另乙個陣列的相對應元素也會發生改變。

2 for迴圈拷貝

對於基本型別

int array = ,};

int array2 = new

int[2][3];

for(int i = 0;i < array.length;i++)

}

這種拷貝是深拷貝,即把array陣列的每乙個元素都賦值給了array2陣列,其中乙個陣列改變,另乙個陣列並不會改變。

對於引用型別

testarray t1 = new testarray[2][3];

for(int i = 0;i < t1.length;i++)

}testarray t2 = new testarray[2][3];

for(int i = 0;i < t1.length;i++)

}

這種拷貝是淺拷貝,即他只是把array陣列內的位址賦給了array2陣列,倆個陣列的位址相同,即倆個陣列都指向同一塊記憶體,乙個陣列改變,另乙個自然也會改變。

3 clone拷貝

int array = ,};

int array2 = new

int[2][3];

array2 = array.clone();

show1(array);

system.out.println("*****=");

show1(array2);

array2[0][0] = 1000;

system.out.println("====改變==");

show1(array);

system.out.println("*****=");

show1(array2);

結果為

由上圖可以看出,當乙個陣列發生變化的時候,另乙個陣列也隨之改變,但是在一維陣列中並沒有出現這種情況。原因如下圖

正確的拷貝方式:

int array = ,};

int array2 = new

int[2][3];

for(int i = 0;i < array.length;i++)

這種拷貝方式是一種深拷貝。

4 arrays.copyof與 arrays.arraycopy

arrays.arraycopy

int array = ,};

int array2 = new

int[2][3];

for(int i = 0;i < array.length;i++),};

int array2 = new

int[2][3];

for(int i = 0;i < array.length;i++){

array2[i] = arrays.copyof(array[i],array[i].length);

對於基本型別的陣列,arrays.copyof與 arrays.arraycopy倆種拷貝方式,他們與clone拷貝方式一樣,必須使用for迴圈進行拷貝,不然拷貝的只是位址,並沒有拷貝到值。

與一維陣列相同clone,arrays.copyof與 arrays.arraycopy三種拷貝方式,對於基本型別的陣列都是深拷貝,而對於引用型別的陣列,他們都是淺拷貝。

對於深拷貝

對於淺拷貝

java二維陣列

定義二維陣列寫法1class numthree public static void main string args float numthree 定義乙個float型別的2維陣列 numthree new float 5 5 為它分配5行5列的空間大小 numthree 0 0 1.1f 通過下...

java二維陣列

定義二維陣列寫法1class numthree public static void main string args float numthree 定義乙個float型別的2維陣列 numthree new float 5 5 為它分配5行5列的空間大小 numthree 0 0 1.1f 通過下...

Java二維陣列

二維陣列靜態初始化 格式 陣列名 new 資料型別,一般都是定義和初始化同時進行 資料型別 陣列名 new 資料型別,例如 int arr new int,package hello public class test 利用for迴圈輸出陣列元素 for int i 0 i結果為 二維陣列動態初始化...