1. 程式人生 > >Java基礎教程(6)--陣列

Java基礎教程(6)--陣列

1.基本概念

  陣列中的每一項稱為元素,每個元素都通過數字索引(也可以稱為下標)訪問,編號從0開始。例如,第4個元素的索引為3。下面的程式建立了一個int型別的陣列,把一些值放入陣列中並將每個值打印出來:

class ArrayDemo {
    public static void main(String[] args) {
        // 宣告陣列
        int[] anArray;
        // 指定陣列的空間
        anArray = new int[10];   
        // 初始化每個元素
        anArray[0] = 100;
        anArray[1] = 200;
        anArray[2] = 300;
        anArray[3] = 400;
        // 將每個元素打印出來
        System.out.println("Element at index 0: " + anArray[0]);
        System.out.println("Element at index 1: " + anArray[1]);
        System.out.println("Element at index 2: " + anArray[2]);
        System.out.println("Element at index 3: " + anArray[3]);
    }
} 

  該程式的輸出是:

Element at index 0: 100
Element at index 1: 200
Element at index 2: 300
Element at index 3: 400

  在實際程式設計時,可能會使用迴圈結構來遍歷陣列的每個元素,而不是像上面的示例中那樣單獨處理每個元素。但是,該示例清楚地說明了陣列的語法。在後續教程中將會介紹各種迴圈結構(for,while,和do-while)。

2.宣告一個引用陣列的變數

  前面的程式使用以下程式碼聲明瞭一個名為anArray的陣列:

int[] anArray;

  與宣告其他型別的變數一樣,陣列變數的宣告也有兩個部分:陣列的型別和陣列的名稱。陣列的型別寫為type[],type表示元素的資料型別,方括號表示這是一個數組變數。與其他型別的變數一樣,宣告一個數組變數實際上並沒有建立陣列,它只是告訴編譯器這個變數可以引用一個指定型別的陣列。還可以像其他語言那樣將方括號放在名稱後面,例如int anArray[],但在Java中並不推薦這種寫法。

3.建立、初始化和訪問陣列

  一種建立陣列的方法是使用new操作符。下面的語句建立了一個長度為10的整數陣列,並將這個陣列的引用賦值給了anArray:

anArray = new int[4];

  下面的語句為陣列中的每個元素賦值:

anArray[0] = 100;
anArray[1] = 200;
anArray[2] = 300;
anArray[3] = 400;

  每個元素都可以通過數字索引進行訪問:

System.out.println("Element 1 at index 0: " + anArray[0]);
System.out.println("Element 2 at index 1: " + anArray[1]);
System.out.println("Element 3 at index 2: " + anArray[2]);

  也可以通過以下語法建立並初始化一個數組:

int[] anArray = { 100, 200, 300, 400 };

  這裡陣列的長度由大括號內元素的數量決定,每個元素使用逗號分隔。   還可以使用兩對或更多對方括號宣告陣列(也稱為多維陣列),例如String[][] names。在多維陣列中,陣列的每一個元素都是陣列。這與C或C++中的陣列不同。這樣做的結果是允許每個陣列的長度不同,例如下面的MultiDimArrayDemo程式:

class MultiDimArrayDemo {
    public static void main(String[] args) {
        String[][] names = {
            {"Mr. ", "Mrs. ", "Ms. "},
            {"Smith", "Jones"}
        };
        // Mr. Smith
        System.out.println(names[0][0] + names[1][0]);
        // Ms. Jones
        System.out.println(names[0][2] + names[1][1]);
    }
}

  這個程式的輸出是:

Mr. Smith
Ms. Jones

  可以使用陣列的length屬性來獲取陣列的大小。以下程式碼將陣列的大小列印到控制檯:

System.out.println(anArray.length);

4.拷貝陣列

  有時候需要將陣列拷貝一份,這樣在操作一個數組時並不會影響另外一個數組。下面的程式碼並不能完成陣列的拷貝:

anotherArray = anArray;

  因為這樣知識將anArray對陣列的引用賦值給了anotherArray,此時的anotherArray和anArray引用了同一個陣列,在任何一個變數上執行對陣列的操作都會影響到陣列。System類有一個arraycopy方法,使用它可將資料從一個數組複製到另一個數組:

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

  兩個Object引數指定源陣列和目標陣列,三個int引數指定源陣列中的起始位置,目標陣列中的起始位置以及要複製的元素的數量。下面的聲明瞭一個char陣列,它使用System.arraycopy方法將源陣列的子序列複製到目標陣列中:

class ArrayCopyDemo {
    public static void main(String[] args) {
        char[] copyFrom = { 'd', 'e', 'c', 'a', 'f', 'f', 'e', 'i', 'n', 'a', 't', 'e', 'd' };
        char[] copyTo = new char[7];
        System.arraycopy(copyFrom, 2, copyTo, 0, 7);
        System.out.println(new String(copyTo));
    }
}

  這個程式的輸出是:

caffein

  Arrays類(位於java.util包中)也提供了copyOfRange方法來拷貝陣列。不同之處在於,使用該方法不需要在呼叫方法之前建立目標陣列,因為這個方法會返回一個數組:

class ArrayCopyOfDemo {
    public static void main(String[] args) {
        
        char[] copyFrom = {'d', 'e', 'c', 'a', 'f', 'f', 'e', 'i', 'n', 'a', 't', 'e', 'd'};  
        char[] copyTo = java.util.Arrays.copyOfRange(copyFrom, 2, 9);
        System.out.println(new String(copyTo));
    }
}

  這個方法的三個引數分別表示源陣列,要複製元素的起始位置(包含)和結束位置(不包含)。   java.util.Arrays類中提供的一些其他有用的方法是:

  • binarySearch方法:在陣列中搜索特定值並獲取其索引。
  • equals方法:比較兩個陣列以確定它們是否相等。
  • fill方法:使用指定值填充陣列。
  • sort方法:按升序對陣列進行排序。