Java提供了一種叫作數組的數據結構,它是一種用來存儲相同類型元素的固定大小順序集合。 數組用於存儲數據集合,但也可以將數組視為相同類型的變數集合。
聲明一個數組變數(如:numbers)並使用numbers[0],numbers[1]和...,numbers[99]來表示單個變數,例如number0,number1,...和number99,而不是單獨地聲明各個變數。
本教程介紹如何聲明數組變數,創建數組和索引訪問數組。
1. 聲明數組變數
要在程式中使用數組,需要先聲明一個變數以引用該數組,並且要指定該變數的數組類型。 以下是聲明數組變數的語法 -
語法
dataType[] arrayRefVar;   // 推薦方式。
// 或者
dataType arrayRefVar[];  // 有效,但不是推薦方式。
注 - 格式:
dataType [] arrayRefVar是推薦方式。 格式:dataType arrayRefVar []來自C/C++語言,可在Java中採用以適應C/C++程式員。
示例
以下代碼片段是此語法的示例 -
double[] myList;   // 推薦方式。
// 或者
double myList[];   // 有效,但不是推薦方式。
2. 創建數組
可以使用new運算符來創建數組,如以下語法 - 
// 聲明
dataType[] arrayRefVar;   // 推薦方式。
// 創建
arrayRefVar = new dataType[arraySize];
上面語句做了兩件事 -
- 它使用new dataType[arraySize]來創建了一個數組。
- 它將新創建的數組的引用分配給變數arrayRefVar。
聲明一個數組變數,創建一個數組,並將該數組的引用分配給變數,可以在一個語句中完成,如下所示 -
dataType[] arrayRefVar = new dataType[arraySize];
或者,可以按如下方式創建數組 -
dataType[] arrayRefVar = {value0, value1, ..., valuek};
通過索引訪問數組元素。 數組索引值從0開始; 也就是說,它們從0開始到arrayRefVar.length - 1。
示例
下麵語句中聲明了一個數組變數myList,它創建了一個包含10個double類型元素的數組,並將數組變數的引用分配給myList  - 
double[] myList = new double[10];
下圖表示數組myList。 這裏,myList數組中包含十個double值,索引從0到9。
3. 處理數組
處理數組元素時,經常使用for迴圈或foreach迴圈,因為數組中的所有元素都是相同的類型,並且數組的大小是已知的。
示例
這是一個完整的示例,演示了如何創建,初始化和處理數組 - 
import java.util.*;
public class Test {
    public static void main(String[] args) {
        double[] myList = { 10.01, 12.19, 23.44, 43.95, 77.88, 65.00 };
        // 列印所有元素
        for (int i = 0; i < myList.length; i++) {
            System.out.print(myList[i] + ", ");
        }
        System.out.println(" ");
        // 求和
        double total = 0;
        for (int i = 0; i < myList.length; i++) {
            total += myList[i];
        }
        System.out.println("總和:" + total);
        // 查找最大值
        double max = myList[0];
        for (int i = 1; i < myList.length; i++) {
            if (myList[i] > max)
                max = myList[i];
        }
        System.out.println("元素最大值:" + max);
    }
}
執行上面示例代碼,得到以下結果:
10.01, 12.19, 23.44, 43.95, 77.88, 65.0,
總和:232.47
元素最大值:77.88
3.1. foreach迴圈
JDK 1.5引入了foreach迴圈或增強for迴圈,它能夠在不使用索引變數的情況下順序遍曆整個數組。
示例
以下代碼演示如何遍歷數組myList中的所有元素 - 
import java.util.*;
public class Test {
    public static void main(String[] args) {
        double[] myList = { 10.01, 12.19, 23.44, 43.95, 77.88, 65.00 };
        // Print all the array elements
        for (double element : myList) {
            System.out.print(element+", ");
        }
    }
}
執行上面示例代碼,得到以下結果:
10.01, 12.19, 23.44, 43.95, 77.88, 65.0,
3.2. 將數組傳遞給方法
就像將原始類型值傳遞給方法一樣,也可以將數組傳遞給方法。 例如,以下printArray()方法用來列印int數組中的元素 - 
示例
import java.util.*;
public class Test {
    public static void main(String[] args) {
        double[] myList = { 10.01, 12.19, 23.44, 43.95, 77.88, 65.00 };
        // Print all the array elements
        printArray(myList);
    }
    public static void printArray(double[] array) {
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }
}
執行上面示例代碼,得到以下結果:
10.01 12.19 23.44 43.95 77.88 65.0
3.3. 從方法返回數組
方法可以返回數組。 例如,以下方法返回一個與給定參數數組相反的數組 -
import java.util.*;
public class Test {
    public static void main(String[] args) {
        double[] myList = { 10.01, 12.19, 23.44, 43.95, 77.88, 65.00 };
        // Print all the array elements
        printArray(myList);
        printArray(reverse(myList));
    }
    public static void printArray(double[] array) {
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
        System.out.println(" ");
    }
    public static double[] reverse(double[] list) {
        double[] result = new double[list.length];
        for (int i = 0, j = result.length - 1; i < list.length; i++, j--) {
            result[j] = list[i];
        }
        return result;
    }
}
執行上面示例代碼,得到以下結果:
10.01 12.19 23.44 43.95 77.88 65.0
65.0 77.88 43.95 23.44 12.19 10.01
3.4. Arrays類
java.util.Arrays類包含各種靜態方法,用於排序和搜索數組,比較數組和填充數組元素。 對於所有基本類型,這些方法都會重載。
| 編號 | 方法 | 描述 | 
|---|---|---|
| 1 | public static int binarySearch(Object[] a, Object key) | 使用二進位搜索演算法搜索指定的Object(Byte,Int,double等)數組以獲取指定值。 必須在進行此調用之前對數組進行排序。 如果搜索關鍵字包含在列表中,則返回搜索關鍵字的索引; 否則,它返回( -(插入點 + 1))。 | 
| 2 | public static boolean equals(long[] a, long[] a2) | 如果兩個指定的 long數組相等,則返回true。 如果兩個數組包含相同數量的元素,則兩個數組被認為是相等的,並且兩個數組中的所有相應元素對相等。如果兩個數組相等,則返回true。 所有其他原始數據類型(Byte,Short,Int等)可以使用相同的方法。 | 
| 3 | public static void fill(int[] a, int val) | 將指定的 int值分配給指定的int數組的每個元素。所有其他原始數據類型(Byte,Short,Int等)可以使用相同的方法。 | 
| 4 | public static void sort(Object[] a) | 根據元素的自然順序,將指定的對象數組按昇冪排序。 所有其他原始數據類型(Byte,Short,Int等)可以使用相同的方法。 | 
