位元詩人 [Java] 程式設計教學:使用陣列 (Array)

Java陣列
Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

Java 已經有 ArrayListLinkedList 兩種串列容器了,其實陣列算是冗餘的特性。Java 會保留陣列的主要原因是吸引 C、C++ 的使用者,在轉用 Java 時仍有熟悉的特性可用。

宣告陣列

以下指令宣告元素型態為 double 的一維陣列:

double vec[];

也可以宣告多維陣列。以下指令宣告元素型態為 double 的二維陣列:

double mtx[][];

建立陣列

使用保留字 new 來建立陣列。以下指令建立元素型態為 double、容量為 10 的一維陣列:

double vec[] = new double[10];

以下指令建立元素型態為 double、維度分別為 32 的二維陣列:

double mtx[][] = new double[3][2];

也可以建立陣列的陣列 (array of array)。參考以下指令:

/* Initialize the outer layer
    of the 2D array. */
double mtx[][] = new double[3][];

/* Initialize the inner layer
    of the 2D array. */
for (int i = 0; i < mtx.length; ++i) {
    mtx[i] = new double[2];
}

以下指令使用陣列實字 (array literal) 來建立陣列並對其賦值:

double vec[] = { 1, 2, 3, 4, 5 };

同理,也可以用在二維陣列上:

double mtx[][] = {
    { 1, 2 },
    { 3, 4 },
    { 5, 6 }
};

存取陣列元素

陣列使用非負整數做為索引來存取元素。陣列索引的起始值為 0 而非 1,這是因為陣列索引是陣列元素的偏移值 (offset)。

參考以下範例:

public class MainProgram
{
    public static void main(String[] args)
    {
        int arr[] = {1, 2, 3, 4, 5};

        assertCond(5 == arr[4]);
    }

    /* Home-made assertion. */
    public static void assertCond(boolean cond)
    {
        if (!cond)
            throw new IllegalArgumentException("Wrong condition");
    }
}

走訪陣列

比較傳統的方式是使用計數器 (counter) 來走訪陣列元素:

int arr[] = {1, 2, 3, 4, 5};

for (int i = 0; i < arr.length; ++i)
    System.out.println(arr[i]);

由於 Java 的陣列有儲存陣列長度的資訊,使用計數器會比在 C 或 C++ 簡單。

也可以使用隱式的迭代器 (iterator) 來走訪:

int arr[] = {1, 2, 3, 4, 5};

for (int n : arr)
    System.out.println(n);

動態增減陣列元素

陣列無法增減長度。雖然程式設計者可以使用資料結構的概念來製作動態陣列 (dynamic array),Java 標準物件庫已經有 ArrayList 了,程式設計者不應該重造次等輪子。

關於作者

身為資訊領域碩士,位元詩人 (ByteBard) 認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

位元詩人喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,位元詩人將所學寫成文章,放在這個網站上和大家分享。