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方法:按升序對陣列進行排序。