原文出自 http://www.cnblogs.com/ggjucheng/archive/2012/12/17/2821925.html
英文出自 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html
數組
數組是一個對象容器,持有固定數目,同一類型的值。當數組建立時,數組的長度就建立了。建立後,它的長度就是固定的。你已經看過了數組的例子,main方法的 "Hello World!"程式。這個章節討論數組的更多細節。
數組的每個成員,成為元素,每個元素通過數字索引訪問。如解,數字索引從0開始,第9個元素,通過索引8訪問。
下面的程式,ArrayDemo,建立整數數組,放一些值到裡面,然後把每個值輸出到標準輸出。
class ArrayDemo { public static void main(String[] args) { // declares an array of integers int[] anArray; // allocates memory for 10 integers anArray = new int[10]; // initialize first element anArray[0] = 100; // initialize second element anArray[1] = 200; // etc. anArray[2] = 300; anArray[3] = 400; anArray[4] = 500; anArray[5] = 600; anArray[6] = 700; anArray[7] = 800; anArray[8] = 900; anArray[9] = 1000; 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]); System.out.println("Element at index 4: " + anArray[4]); System.out.println("Element at index 5: " + anArray[5]); System.out.println("Element at index 6: " + anArray[6]); System.out.println("Element at index 7: " + anArray[7]); System.out.println("Element at index 8: " + anArray[8]); System.out.println("Element at index 9: " + anArray[9]); }}
程式輸出是
Element at index 0: 100Element at index 1: 200Element at index 2: 300Element at index 3: 400Element at index 4: 500Element at index 5: 600Element at index 6: 700Element at index 7: 800Element at index 8: 900Element at index 9: 1000
在真實世界方案中,最大的可能是使用一個迴圈構,遍曆數組中的每個元素,而不是像上面每行寫一行代碼。但是,例子清晰解說了數組的文法。
聲明陣列變數
上面的程式,使用下面的代碼聲明anArray:
// declares an array of integersint[] anArray;
就像聲明其他類型的變數,數組聲明有兩部分:數組的類型和數組的名字。一個數組的類型寫為type[],type是數組包含的元素的資料類型;方括弧中的特殊符號,表明這個變數包含數組。數組的大小,不是它類型的一部分(所以方括弧是空的)。數組的名字遵循命令規範的規則和慣例。和變數的其他類型一樣,聲明實際上不建立數組—它簡單告訴編譯器,該變數將持有該類型的數組。
類似,可以聲明其他類型的數組:
byte[] anArrayOfBytes;short[] anArrayOfShorts;long[] anArrayOfLongs;float[] anArrayOfFloats;double[] anArrayOfDoubles;boolean[] anArrayOfBooleans;char[] anArrayOfChars;String[] anArrayOfStrings;
也可以把中括弧放在數組名字的後面:
// this form is discouragedfloat anArrayOfFloats[];
但是,按照慣例不推薦這個形式;中括弧內確定數群組類型,應該會出現指定的類型。
建立,初始化,訪問數組
有一個方法建立數組是用new操作符。ArrayDemo程式分配一個10個元素的數組,並賦值數組的引用給anArray變數。
// create an array of integersanArray = new int[10];
如果聲明缺失,編譯器會報錯,錯誤資訊類似下面:
ArrayDemo.java:4: Variable anArray may not have been initialized.
下面幾行給數組的每個元素賦值:
anArray[0] = 100; // initialize first elementanArray[1] = 200; // initialize second elementanArray[2] = 300; // etc.
每個數組元素通過數字索引訪問:
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, 500, 600, 700, 800, 900, 1000};
數組的長度,由{和}之間的值的長度決定。
使用兩個或兩個以上的中括弧,可以聲明數組的數組(多維陣列)。例如String[][] names.每個元素,必須通過相關的數字索引訪問。
java程式設計語言,多維陣列簡單看來就是元素是數組的數組。這不像C或者Fortran,這樣做的後果是,該行被允許在長度的不同而有所差異。如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. SmithMs. Jones
最後,使用內建的length屬性顯示任何數組的長度,代碼
System.out.println(anArray.length);
將輸出數組的長度到標準輸出。
數組拷貝
System類有一個arraycopy方法,可以有效把資料從一個數組拷貝到另一個數組:
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
兩個Object參數指定源數組src和目標數組dest。剩下的三個int參數指明源數組的開始位置,目標數組的開始位置,要拷貝的數組的元素個數。
接下來的程式,ArrayCopyDemo,聲明一個char數組,拼字"decaffeinated",使用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