陣列和二維陣列
摘要:本文主要對陣列和二維陣列進行簡要介紹。
陣列
定義
陣列可以理解成儲存一組數的容器,而變數可以理解為儲存一個數的容器。
陣列是一種引用型別,用於儲存一組相同型別的資料。
陣列定義的型別可以為任意型別,意思是我們可以定義int型別的陣列,也可以定義String型別的陣列,或其他任何型別的陣列。
陣列實際在記憶體的儲存和基本型別不同,實際上是在堆中申請空間儲存一組數,棧中只是有一個地址的引用。
宣告陣列
語法:
1 型別[] 陣列名; 2 型別 陣列名[];
舉例:
1 int[] sum; 2 int color[];
說明:
此時只是聲明瞭一個數組變數,並沒有在記憶體中開闢空間。
開闢空間
語法:
1 陣列名 = new 型別[長度];
舉例:
1 sum = new int[5];
說明:
陣列開闢空間時,必須要設定開闢的空間長度。
這時會根據型別對數組裡的資料設定預設值。
陣列賦值
語法:
1 陣列名[下標] = 值;
舉例:
1 sum[0] = 10;
說明:
在對陣列進行賦值時,注意下標不要超過陣列的長度範圍,否則會產生錯誤。
使用陣列
語法:
1 陣列名[下標]
舉例:
1 System.out.println(sum[0]);
說明:
同樣需要注意下標不要超過陣列的長度範圍。
其他賦值方式
除了上面通過下標賦值,還可以在宣告時開闢空間並賦值,或者在開闢空間時賦值。
語法:
1 陣列名 = new 型別[]{值, 值}; 2 型別[] 陣列名 = {值, 值};
舉例:
1 int[] sum = {1, 2}; 2 sum = new int[]{1, 2, 3};
說明:
這兩種方式都需要在確定陣列大小和值的內容的時候使用。
在開闢空間時賦值,不需要在中括號裡面填寫陣列長度。
注意
陣列不賦值也有預設值。
陣列中每個元素的賦值和訪問都是通過“陣列名[下標]”實現的,不能直接使用陣列名。
“陣列名.length”代表的是陣列的長度,經常用在迴圈中,提高程式碼的維護性。
陣列的下標從 0 ~ 陣列名.length - 1 ,如果不是這個範圍,會導致一個數組下標越界的異常:ArrayIndexOutOfBoundsException。
陣列沒有開闢空間,直接使用,會導致一個空指標異常:NullPointerException。
進階使用
陣列的複製
◆ 引用型別的賦值:複製的是一個地址號,二者共同引用一個地址,其中一個對陣列做了更改,都會影響另一個。
◆ 基本型別的賦值:複製的是數值內容,實際上是一個備份,其中一個對它更改,不會影響另一個。
複製引用地址:
複製的是一個地址號,二者共同引用一個地址,其中一個對陣列做了更改,都會影響另一個。
1 int[] a1 = {1, 2, 3}; 2 int[] a2; 3 a2 = a1; 4 System.out.println(a2[0]); 5 a1[0] = 100; 6 System.out.println(a2[0]);
結果:
1 1 2 100
複製陣列資料:
1 int[] a1={1, 7, 8}; 2 int[] a2 = new int[a1.length]; 3 for (int i = 0; i < a1.length; i++) { 4 a2[i] = a1[i]; 5 } 6 System.out.println(a2[0]); 7 a2[1]=100; 8 System.out.println(a2[0]);
結果:
1 1 2 1
陣列的排序
1 int[] nums = {1, 9, 3, 5, 2, 8, 4}; 2 for(int i = 0; i < nums.length - 1; i++) {// 控制輪數 3 for(int j = 0; j < nums.length - 1 - i; j++) { 4 if (nums[j] < nums[j + 1]) {// 交換 5 int temp = nums[j]; 6 nums[j] = nums[j + 1]; 7 nums[j + 1] = temp; 8 } 9 } 10 }
陣列的倒置
1 int[] nums = {1, 9, 3, 5, 2, 8, 4}; 2 for(int i = 0; i < nums.length / 2; i++) { 3 int temp = nums[i]; 4 nums[i] = nums[nums.length - 1 - i]; 5 nums[nums.length - 1 - i] = temp; 6 }
工具類
排序: Arrays.sort(nums);
填充: Arrays.fill(nums, 1);
轉成字串以便列印: Arrays.toString(nums);
比較: Arrays.equals(a1, a2);
二維陣列
定義
二維陣列可以看做是一個數組,裡面存放的元素是一維陣列。
宣告陣列
1 int[][] nums; 2 int nums[][]; 3 int[] nums[];
開闢空間
1 nums = new int[3][];// 行固定,列不固定。 2 nums = new int[3][2];// 行固定,列固定。
陣列賦值
動態初始化,使用時賦值,需要指明行和列:
1 nums[0][1] = 1;
靜態初始化,宣告時賦值,不必也不能指明行和列,否則會提示錯誤:
1 int[][] nums = new int[][]{{1}, {9, 3, 5, 2}, {7, 6}}; 2 int[][] nums = {{1}, {9, 3, 5, 2}, {7, 6}};
注意
如果在動態初始化時明確了二維陣列的行數和列數,那麼一維陣列的長度就是固定的列數。
如果在動態初始化時僅僅明確了行數,或者通過靜態初始化賦值,那麼一維陣列可以有不同的長度。