1. 程式人生 > >陣列和二維陣列

陣列和二維陣列

摘要:本文主要對陣列和二維陣列進行簡要介紹。

陣列

定義

陣列可以理解成儲存一組數的容器,而變數可以理解為儲存一個數的容器。

陣列是一種引用型別,用於儲存一組相同型別的資料。

陣列定義的型別可以為任意型別,意思是我們可以定義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}};

注意

如果在動態初始化時明確了二維陣列的行數和列數,那麼一維陣列的長度就是固定的列數。

如果在動態初始化時僅僅明確了行數,或者通過靜態初始化賦值,那麼一維陣列可以有不同的長度。