1. 程式人生 > >5、java中的陣列

5、java中的陣列

1、簡介

陣列是一種具有隨機存取特性的資料結構,是記憶體上一段連續區域的表示,是實現順序儲存的基礎,陣列只能用於儲存同一型別的資料。陣列的長度在初始化時定義之後就不可更改,並且在初始化陣列時必須指定陣列的長度。

2、陣列的宣告和賦值

這裡用一維陣列為例,建立陣列有以下兩種方式,一是宣告時直接賦值,而是先聲明後賦值。

第一種:

Int []array = {1,2,3} ;//宣告並給陣列賦值,長度為3

第二種:

Int []array = new int[3];//宣告一個長度為3的陣列,這個時候在堆中已經開闢了空間,長度為3

array[0] = 1;

array[1] = 2;

array[2] = 3;//賦值

這裡注意的是陣列的下標是從0開始的,例如宣告一個長度為3的陣列,那麼他的最後一個下標是2,當給下標大於2的元素賦值時就會報錯。

3、記憶體分配

陣列是引用資料型別,當宣告一個長度為len陣列時,就會在堆記憶體中開闢一段連續長度為len的區域,然後棧中的變數的值則儲存的是指向陣列第一個元素的地址,也就是下標為0的元素的地址。

現在用2中宣告的陣列來說名一下記憶體的分配情況,int []array = new int[3];這樣建立一個數組時,在棧中則會開闢一個空間儲存變數名array,在堆中開闢3塊連續的並且每一塊佔用的空間是相同的空間,而array變數的值則是堆中3塊連續空間的第一塊空間的地址,以後不管是設定陣列值還是獲取陣列值時都直接根據地址進行設定即可,例如這裡宣告的是int陣列,那麼每一個元素佔4個位元組大小的空間,則會在記憶體中開闢3塊連續的並且每一塊空間長度都是4個位元組大小的空間,然後array的值是一個塊空間的地址值,假如array=0x1234,那麼array[0]=0x1234,array[1] = 0x1234+4*1=0x1238,這樣便使得陣列具有隨機存取的特性,這也是陣列為什麼只能儲存同一型別資料的根本原因。

基本記憶體分配情況如下圖:

4、基本操作

對於陣列的操作無非就是設定、獲取、遍歷、排序和求最值

設定值就不說了,說一下其他幾個。

獲取陣列中的值,直接根據陣列的下標獲取即可,例如想獲取array中第二個元素的值,則直接使用array[1]來獲取即可。

遍歷陣列的值,遍歷的概念就是將陣列中的值挨個獲取一遍,這個時候就可以使用迴圈語句來獲取即可,這裡說一下陣列有一個屬性length,可以獲取陣列的長度。

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

    System.out.println(array[i]);//根據下標獲取每一個值

}

給陣列中的元素進行排序,實現陣列排序的方式有很多演算法,可以嘗試著去了解一下,這裡就不細說了(有一篇文章詳細的介紹了排序演算法),只要記住沒有什麼問題是不能通過使用一箇中間層來解決的就可以了,java中提供了處理陣列的工具類Arrays,其中的sort方法直接可以實現陣列的排序

求最值的操作,這裡先說一下,java已經提供了Arrays類來處理陣列,開發時直接使用即可,這裡簡單的說一下實現的過程,就是藉助一個臨時變數,然後遍歷每一個數組的元素,比較每一個元素,將每一次的較大值存放在臨時變數中,當陣列變數結束時臨時變數便是最大值

int max = array[0];//假設最大值是array[0]

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

     if(array[i] > max){

          max = array[i];

     }

}

System.out.println(“最大值是max=”+max);

5、二維陣列

二維陣列沒什麼好說的,二維陣列就是一個每一個元素都是一維陣列的一維陣列,建立方式如下:

建立一個二維陣列,他的長度是2,元素是長度為3的一維陣列

Int [][]array = new int[2][3];//

或者:

Int [][]array = {{1,2,3},{1,2,3}};

對於二維陣列的操作和一維陣列相同,只是多一層迴圈而已,就是先處理二維陣列的每一個元素,又因為每一個元素是一維陣列,又要迴圈處理每一個元素。

需要自己動手去測試,動腦去思考。