Java Grammar:數組

數組,一種應用非常廣泛的數據結構,簡單地來說就是一組

類型相同無序的元素的存儲在固定長度且有序**的內存空間。

創建一個數組

在Java中,我們可以通過[]去聲明一個指定類型的數組:

int[] a; // 寫法一int a[]; // 寫法二

當然,一般情況下我們更喜歡使用第一種方式來聲明一個數組,因為它將類型與變量名分開,優化了代碼的可讀性。 剛剛我們只是聲明瞭一個數組a,但是並沒有將a初始化為一個真正的數組。

在給數組賦值時,我們

可以通過三種方式:

int[] a = new int[4];int[] a = new int[]{1,2,3,4};int[] a = {1,4,3,2}

其中第三種實際上是第二種的簡寫,我們可以通過使用new關鍵字去創建一個匿名的數組:

new int[4]; 

但是記得一定要指定長度或者指定數組中的元素,這裡如果想要創建一個匿名的數組,new關鍵字是必不可少的:

{1,2,4,3} // 這樣寫是錯誤的!

無論我們怎麼去定義一個數組,它的長度在創建之初都是被確定的,但是需要注意一點,它的長度也不是無窮無盡的,我們可以通過查看反射包中的Array類源碼獲得它的長度數據類型:

public static Object newInstance(Class> componentType, int length)        throws NegativeArraySizeException {        return newArray(componentType, length);}

這裡可以看到數組的數據類型是int類型,而int類型在前面我們也提過,它的最大長度是$2^{31}$,也就是2GB。

訪問數組中的元素

我們可以通過下標的方式來訪問數組中的元素,數組的下標從0開始,最大長度是數組的長度,如果我們訪問超出數組下標範圍的數據,就會拋出索引越界異常(ArrayOutOfIndexError),因為我們可以通過下標直接訪問數組中的元素,所以時間複雜度是O(1)。

int[] a = {1,2,3};System.out.println(a[0]); // 1 

往數組中添加元素

剛剛我們說過,數組中的長度是固定的,所以我們無法去改變該數組的結構,但是我們可以通過另外一種方法來實現這樣的效果:

int[] arr = {9,7,5};int[] temp = new int[arr.length+1];for(int i = 0;i < arr.length;i++) { temp[i]=arr[i];}temp[arr.length] = 6;arr = temp;


Java Grammar:數組


刪除元素

和新增一樣,刪除數組中的元素同樣是不允許的,我們可以通過和新增類似的方式來完成刪除的操作:

int[] arr = { 1, 2, 3, 4, 5};int[] tmp = new int[arr.length - 1];for (int i = 0; i < tmp.length; i++) {  tmp[i] = arr[i];}arr = tmp;

原理上和新增是比較類似的,這裡我就不再畫圖去詳細的說明了

二維數組(瞭解)

我們像創建一維數組一樣可以創建一個二維數組

int[][] doubleArr = new int[2][3];int[][] doubleArr = new int[5][];

這裡需要注意一點,二維數組的創建時,可以指定一個維度的長度,而不指定第二維度的長度,使之動態的變化。比如我們可以畫個星星

String[][] arr = new String[5][];for (int i = 0; i < arr.length; i++) {  arr[i] = new String[i + 1];  for (int j = 0; j < arr[i].length;j++) {    arr[i][j] = "*";  }}for (int i = 0; i < arr.length; i++) {  for (int j = 0; j < arr[i].length;j++) {    System.out.print(arr[i][j]);  }  System.out.println();}
Java Grammar:數組


分享到:


相關文章: