前言
Java 已經有 ArrayList 和 LinkedList 兩種串列容器了,其實陣列算是冗餘的特性。Java 會保留陣列的主要原因是吸引 C、C++ 的使用者,在轉用 Java 時仍有熟悉的特性可用。
宣告陣列
以下指令宣告元素型態為 double
的一維陣列:
double vec[];
也可以宣告多維陣列。以下指令宣告元素型態為 double
的二維陣列:
double mtx[][];
建立陣列
使用保留字 new
來建立陣列。以下指令建立元素型態為 double
、容量為 10
的一維陣列:
double vec[] = new double[10];
以下指令建立元素型態為 double
、維度分別為 3
、2
的二維陣列:
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
了,程式設計者不應該重造次等輪子。