1. foreach循環
使用foreach循環周遊數組和集合元素時,無須獲得數組和集合的長度,無須根據索引來通路數組元素和集合元素,系統自動周遊數組和集合的每個元素。
µ 格式:
for(類型 變量名 : 數組名 | 集合名){
//變量自動疊代通路每個元素...
}
µ 注意:若數組中有n個元素,則該循環就循環n次;每一次循環都将數組中的一個元素賦給變量,循環體就對該變量進行操作。
例如:
String[] names ={"Georgianna","Jen","Simon"};
for (String name : names){
System.out.println(name);
注意:
ü 使用foreach循環周遊數組元素無須獲得數組長度,也無須根據索引來通路數組元素。
ü 無須循環條件,無須循環疊代語句,這些部分都由系統來完成。自動疊代數組的每個元素,當每個元素被疊代一次後,foreach循環自動結束。
ü 當使用foreach循環時,通常不要對循環變量進行指派,雖然沒有文法錯,但極容易引起錯誤。
ü 當使用foreach來疊代通路數組元素時,循環變量相當于臨時變量,系統會把數組元素依次賦給這個臨時變量,但它并不是數組元素。改變循環變量的值,并不能改變元素的值。是以,如果希望改變數組元素的值,則不能使用這種foreach循環。
2. 多元數組可以了解為由若幹低維數組組成的數組,例如,多個一維數組可以組合而成為“二維數組”,多個二維數組組成三維數組…
要通路二維數組中的某個元素,需要知道該元素的位置(第幾行、第幾列)
3. 二維數組的聲明
格式:類型名 變量名[][]; 或 類型名[][] 變量名;
例如,int[][] s; Student s[][];
(第一個角标(即第一個[])代表行,第二個代表列。)
需注意:聲明了數組類型變量,運作時系統隻為引用變量配置設定引用空間,并沒有建立對象,也不會為數組元素配置設定空間,是以尚不能使用任何數組元素。(與一維數組一樣)
4. 二維數組對象的建立和初始化
µ 靜态初始化
格式:類型[][] 數組名={{第0行初值},…,{第n-1行初值}};
例如,int[][]s={{67,89,53},{77,98,68},{57,66,73},{80,88,94},{84,92,90}};
µ 動态初始化
ü (第一種)直接為每一維配置設定空間
例如,int [][] s=new int[5][3];
ü (第二種)從最高維(即行數)開始(必須從最高維開始),分别為每一維配置設定空間。(隻指定行的個數,不指定列的個數)
例如,int[][] s=new int[3][];
s[0]=new int[3];
s[1]=new int[3];
s[2]=new int[3];
不能這麼寫:
s[0]={1,2,3};
s[1]={1,2,3};
s[2]={1,2,3};
但可以這麼寫:
S[0]=new int[3];
s[0][0]=1;
s[0] [1]=2;
s[0] [2]=3;
也可以這麼寫:
s[0]=new int[]{1,2,3};
s[1]= new int[]{1,2,3};
s[2]= new int[]{1,2,3};
5. 注意: Java中允許二維數組中每行的元素個數不同,即每行的列數可以不同。
例如靜态初始化:int[][]={{1,2},{1,2,3},{1,2,3,4}}
例如動态初始化:int[][] s=new int[3][];
s[0]=new int[1]; s[1]=new int[2]; s[2]=new int[3];
6. 注意:使用二維數組s的length屬性可獲得二維數組高維(即行數)的大小;使用s[i].length屬性可獲得二維數組每一行的列數,即每一行的元素個數。
for(int i=0;i<s.length;i++){
for(int j=0;j<s[i].length;j++)
sum+=s[i][j];
}
6. 在JDK的java.util包中定義的Arrays類提供了多種數組操作方法,實作了對數組元素的排序、填充、轉換、增強檢索和深度比較等功能,所有的這些方法都是static的。
¯ 數組元素的排序方法
原型:public static void sort(<type>[] a);
例如,int[]a={4,12,0,-5,45,-56};
Arrays.sort(a);
例6.7 數組的排序。
注意:數組元素的排序通常指一維數值型數組元素按升序排序,偶爾也會涉及一維String數組的排序,多元和其他引用類型的數組排序實用意義不大。