Java陣列


Java提供了一種叫作陣列的資料結構,它是一種用來儲存相同型別元素的固定大小順序集合。 陣列用於儲存資料集合,但也可以將陣列視為相同型別的變數集合。

宣告一個陣列變數(如:numbers)並使用numbers[0]numbers[1]...numbers[99]來表示單個變數,例如number0number1...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,它建立了一個包含10double型別元素的陣列,並將陣列變數的參照分配給myList -

double[] myList = new double[10];

下圖表示陣列myList。 這裡,myList陣列中包含十個double值,索引從09
數組存儲結構示例

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等)可以使用相同的方法。