Java陣列的定義和使用
如果希望儲存一組有相同型別的資料,可以使用陣列。
陣列的定義和記憶體分配
Java 中定義陣列的語法有兩種: type arrayName[]; type[] arrayName;type 為Java中的任意資料型別,包括基本型別和組合型別,arrayName為陣列名,必須是一個合法的識別符號,[ ] 指明該變數是一個數組型別變數。例如:
1. int demoArray[];
2. int[] demoArray;
這兩種形式沒有區別,使用效果完全一樣,讀者可根據自己的程式設計習慣選擇。與C、C++不同,Java在定義陣列時並不為陣列元素分配記憶體,因此[ ]中無需指定陣列元素的個數,即陣列長度。而且對於如上定義的一個數組是不能訪問它的任何元素的,我們必須要為它分配記憶體空間,這時要用到運算子new,其格式如下:
1. demoArray=newint[3];
為一個整型陣列分配3個int 型整數所佔據的記憶體空間。通常,你可以在定義的同時分配空間,語法為: type arrayName[] = new type[arraySize];例如:
1. int demoArray[]=newint[3];
陣列的初始化
你可以在宣告陣列的同時進行初始化(靜態初始化),也可以在宣告以後進行初始化(動態初始化)。例如:
1. // 靜態初始化
2. // 靜態初始化的同時就為陣列元素分配空間並賦值
3. int intArray[]={1,2,3,4};
4. String stringArray[]={"微學苑","http://www.weixueyuan.net","一切程式語言都是紙老虎"};
5.
6. // 動態初始化
7. float floatArray[]=newfloat[3];
8. floatArray[0]=1.0f;
9. floatArray[1]=132.63f;
10. floatArray[2]= 100F;
陣列引用
可以通過下標來引用陣列: arrayName[index];與C、C++不同,Java對陣列元素要進行越界檢查以保證安全性。每個陣列都有一個length屬性來指明它的長度,例如 intArray.length 指明陣列 intArray 的長度。
1. import java.util.*;
2. publicclass Demo {
3. publicstaticvoidmain(String[] args){
4. int intArray[]=newint[5];
5. long total =0;
6. int len = intArray.length;
7.
8. // 給陣列元素賦值
9. System.out.print("請輸入"+ len +"個整數,以空格為分隔:");
10. Scanner sc =newScanner(System.in);
11. for(int i=0; i<len; i++){
12. intArray[i]= sc.nextInt();
13. }
14.
15. // 計算陣列元素的和
16. for(int i=0; i<len; i++){
17. total += intArray[i];
18. }
19.
20. System.out.println("所有陣列元素的和為:"+ total);
21. }
22. }
執行結果:請輸入5個整數,以空格為分隔:10 20 15 25 50所有陣列元素的和為:120
陣列的遍歷
實際開發中,經常需要遍歷陣列以獲取陣列中的每一個元素。最容易想到的方法是for迴圈,例如:
1. int arrayDemo[]={1,2,4,7,9,192,100};
2. for(int i=0,len=arrayDemo.length; i<len; i++){
3. System.out.println(arrayDemo[i]+", ");
4. }
輸出結果:1, 2, 4, 7, 9, 192, 100,不過,Java提供了”增強版“的for迴圈,專門用來遍歷陣列,語法為:
1. for( arrayType varName: arrayName ){
2. // Some Code
3. }
arrayType 為陣列型別(也是陣列元素的型別);varName 是用來儲存當前元素的變數,每次迴圈它的值都會改變;arrayName 為陣列名稱。每迴圈一次,就會獲取陣列中下一個元素的值,儲存到 varName 變數,直到陣列結束。即,第一次迴圈 varName 的值為第0個元素,第二次迴圈為第1個元素......例如:
1. int arrayDemo[]={1,2,4,7,9,192,100};
2. for(int x: arrayDemo){
3. System.out.println(x +", ");
4. }
輸出結果與上面相同。這種增強版的for迴圈也被稱為”foreach迴圈“,它是普通for迴圈語句的特殊簡化版。所有的foreach迴圈都可以被改寫成for迴圈。但是,如果你希望使用陣列的索引,那麼增強版的 for 迴圈無法做到。
二維陣列
二維陣列的宣告、初始化和引用與一維陣列相似:
1. int intArray[][]={{1,2},{2,3},{4,5}};
2. int a[][]=newint[2][3];
3. a[0][0]=12;
4. a[0][1]=34;
5. // ......
6. a[1][2]=93;
Java語言中,由於把二維陣列看作是陣列的陣列,陣列空間不是連續分配的,所以不要求二維陣列每一維的大小相同。例如:
1. int intArray[][]={{1,2},{2,3},{3,4,5}};
2. int a[][]=newint[2][];
3. a[0]=newint[3];
4. a[1]=newint[5];
【示例】通過二維陣列計算兩個矩陣的乘積。
1. publicclass Demo {
2. publicstaticvoidmain(String[] args){
3. // 第一個矩陣(動態初始化一個二維陣列)
4. int a[][]=newint[2][3];
5. // 第二個矩陣(靜態初始化一個二維陣列)
6. int b[][]={{1,5,2,8},{5,9,10,-3},{2,7,-5,-18}};
7. // 結果矩陣
8. int c[][]=newint[2][4];
9.
10. // 初始化第一個矩陣
11. for(int i=0; i<2; i++)
12. for(int j=0; j<3;j++)
13. a[i][j]=(i+1)*(j+2);
14.
15. // 計算矩陣乘積
16. for(int i=0; i<2; i++){
17. for(int j=0; j<4; j++){
18. c[i][j]=0;
19. for(int k=0; k<3; k++)
20. c[i][j]+= a[i][k]* b[k][j];
21. }
22. }
23.
24. // 輸出結算結果
25. for(int i=0; i<2; i++){
26. for(int j=0; j<4; j++)
27. System.out.printf("%-5d", c[i][j]);
28. System.out.println();
29. }
30. }
31. }
執行結果:25 65 14 -65 50 130 28 -130幾點說明:
· 上面講的是靜態陣列。靜態陣列一旦被宣告,它的容量就固定了,不容改變。所以在宣告陣列時,一定要考慮陣列的最大容量,防止容量不夠的現象。
· 如果想在執行程式時改變容量,就需要用到陣列列表(ArrayList,也稱動態陣列)或向量(Vector)。
· 正是由於靜態陣列容量固定的缺點,實際開發中使用頻率不高,被 ArrayList 或 Vector 代替,因為實際開發中經常需要向陣列中新增或刪除元素,而它的容量不好預估。
Java學習視訊:http://www.makeru.com.cn/course/1427.html?v=java_v1.1
Java學習交流群:587131012