這個系列將從 Java 陣列開始,陣列是用來存放一組具有相同類型資料的資料結構,通過索引來訪問陣列中的元素。
- 陣列的定義
- 陣列的本質
- 陣列的複製
陣列的定義#
陣列的定義主要有兩種,一種是先指定陣列的大小,然後根據陣列元素索引進行賦值,另一種是直接創建一個陣列並進行賦值,具體如下:
//1.定義大小為10的陣列
int[] arrayA = new int[10];
int arrayB[] = new int[10];
arrayA[0] = 1;
arrayB[1] = 2;
//2.定義陣列並賦值
int[] arrayC = {1,2,3,4,5};
陣列的本質#
Java 中的陣列實際上是一個類,因此兩個陣列變數可以指向同一個陣列,觀察如下程式碼:
int[] arrayD = {1,1,1};
int[] arrayE = arrayD;
arrayD[0] = 2;
System.out.println(arrayE[0]);
顯然,執行上述程式碼結果肯定是 2,上述程式碼中,將陣列 arrayD 的值指向 arrayE,其本質是兩個陣列 arrayD、arrayE 指向了同一塊陣列空間,當修改了 arrayD 中某一元素的值,相應的 arrayE 中對應元素值也發生了變化,具體如下圖所示:
注意:當陣列作為方法的參數傳遞時,相當於傳遞的是陣列的引用,因此在方法中對陣列的操作也會影響到原來的陣列,這一點非常重要。
陣列的複製#
為了得到兩個陣列元素的每個值都相同的元素,我們可以使用 Java 提供的 arraycopy () 來實現,具體如下:
int[] arrayD = {1,1,1};
int[] arrayF = new int[3];
//複製陣列
System.arraycopy(arrayD, 0, arrayF, 0, 3);
System.out.println(Arrays.toString(arrayF));
顯然,上述程式碼執行完陣列 arrayF 的值為 1、1、1,如果間接修改了陣列 arrayD 中陣列元素的值,則完陣列 arrayF 的值為 2、1、1,這是結合上下文獲得的結果。
下面順便說一下 arraycopy 方法參數的含義,具體如下:
/**
* 複製陣列
* @param src:原陣列
* @param srcPos:原陣列開始被複製的位置
* @param dest:目標陣列
* @param destPos:目標陣列開始的位置
* @param length:目標陣列的長度
*/
public static void arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length) {
}
陣列中好像要注意的東西也就這麼多了,當然還有其他關於操作陣列的 API ,上面遇到陣列之間的賦值影響了原來陣列的值,這也是之前自己沒有注意到的,今天就寫這麼多。