盤點JAVA對陣列的支援,以及陣列實用Arrays.
1.一維陣列的定義如下:
型別識別符號 陣列名[];
eg: int intArray[];
型別識別符號[] 陣列名;
eg: double[] example;
2.一維陣列的初始化
(1).直接指定初值的方式
int[] a1 = {1,2,3};
聲明瞭陣列名為a1的陣列,併為其賦初值。共有3個初值,故陣列元素個數為3。
(2).用new初始化陣列:
型別識別符號 陣列名[];
eg: int[] intArray;
陣列名 = new 型別識別符號 [ 陣列長度 ] ;
eg: intArray = new int[3];
上述程式碼為一個整型陣列分配了3個Int型整數所佔據的記憶體空間。通常,這兩個語句可以合在一起,格式如下:
型別識別符號 陣列名 = new 型別識別符號 [陣列長度];
eg:int a = new int[3];
3.一維陣列元素的引用
注意:a.length指明陣列a的長度。下面例子演示了java語法定義陣列,和引用陣列元素的方式。
功能: 對陣列的每個元素進行賦值,然後逆序輸出。
【Shuzu.java】 public class Shuzu{ public static void main(String[] args){ int i; int a[] = new int[5]; for(i=0;i<5;i++){ a[i] = i; } for(i=a.length-1;i>=0;i--){ System.out.println("a["+i+"]="+a[i]); } } } 程式執行結果: a[4]=4 a[3]=3 a[2]=2 a[1]=1 a[0]=0
4.一維陣列程式舉例
**功能:**利用陣列處理FIbonacci數列,並打印出前十行。
【Fibonacci.java】 public class Fibonacci{ public static void main(String[] args){ int i; int a[] = new int[10]; a[0] = a[1] = 1; for(i=2;i<10;i++) { a[i] = a[i-1]+a[i-2]; } for(i=1;i<=10;i++) { System.out.println("a["+i+"]="+a[i-1]); } } } 程式執行結果: a[1]=1 a[2]=1 a[3]=2 a[4]=3 a[5]=5 a[6]=8 a[7]=13 a[8]=21 a[9]=34 a[10]=55
1.二維陣列的宣告
型別識別符號 陣列名[ ][ ];
eg: int intArray[ ][ ];
與一維陣列一樣,二維陣列對陣列元素也沒有分配記憶體空間,同樣要使用運算子new來分配記憶體,然後才可以訪問每個元素。
分配空間的方法:
(1).直接為每一維分配空間 int a[ ][ ] = new int[2][3];
(2).從最高維開始,分別為每一維分配空間
int a[ ][ ] = new int[2][ ];
a[0] = new int[3];
a[1] = new int[3];
- 動態初始化:
資料型別[ ][ ] 物件陣列 = new 資料型別[行個數] [列個數] ; - 靜態初始化:
資料型別[ ][ ] 物件陣列 = new 資料型別[ ][ ]{{值,值,…},{值,值,…},…} ;
2.二維陣列元素的引用
陣列名【下標1】【下標2】
其中,下標1,下標2為整型常數或表示式,如a[2][3]等,同樣,每一維的下標都是從0開始。
3.二維陣列的初始化
(1).直接對每個元素進行賦值
(2).在宣告陣列的同時進行初始化
Int[ ][ ] = {{1,2},{3,4},{5,6}};
上面定義了一個3x2的陣列,並對每個元素進行賦值。
匿名陣列:
public class ArrayDemo{
public static void main(String[] args) {
System.out.println(new int[]{1,2,5,55,555,223,45545,666465,6443}.length) ; // 匿名陣列
}
}
陣列最大的缺陷:長度固定(存在越界問題)
定義一個二維陣列:
public class ArrayDemo{
public static void main(String[] args) {
// 陣列並不是等列陣列
int[][] data = new int[][] {
{1,2,3},{4,5},{6,7,8,9}
};
// 在進行輸出的時候一定要使用雙重迴圈
for (int x = 0; x<data.length ; x++) {
for (int y = 0; y<data[x].length ; y ++) {
System.out.println("data{"+x+"]["+y+"]="+data[x][y]+"、") ;
}
System.out.println();
}
}
}
> 陣列是引用資料型別,所有引用資料型別都可以為其設定多個棧記憶體指向。所以在進行陣列操作的時候,也可以將其通過方法進行處理。
範例:方法接收陣列
public class ArrayDemo{
public static void main(String[] args) {
int[] data = new int[] {1,2,3,4,5} ;
printArray(data) ; // 其效果等價於 int[] temp = data ;
}
public static void printArray(int[] temp) {
for (int i = 0 ; i<temp.length ; i++) {
System.out.println(temp[i]) ;
}
}
}
範例:方法返回陣列
public class ArrayDemo{
public static void main(String[] args) {
int[] data = init() ;
printArray(data) ;
}
// 定義一個返回陣列的方法
public static int[] init(){
return new int[] {1,2,3,4,5} ; // 匿名陣列
}
public static void printArray(int[] temp) {
for (int i = 0 ; i<temp.length ; i++) {
System.out.println(temp[i]) ;
}
}
}
現在的陣列上發生了引用傳遞,那麼就意味著方法在接收陣列後也可以修改陣列。
範例:方法修改陣列
public class ArrayDemo{
public static void main(String[] args) {
int[] data = init() ;
bigger(data) ;
printArray(data) ;
}
// 定義一個返回陣列的方法
public static int[] init(){
return new int[] {1,2,3,4,5} ; // 匿名陣列
}
// 將陣列中每個元素的值擴大5倍
public static void bigger(int[] arr){
for (int i =0 ; i<arr.length ; i++) {
arr[i]*=5 ; // 每個元素擴大5倍
}
}
public static void printArray(int[] temp) {
for (int i = 0 ; i<temp.length ; i++) {
System.out.println(temp[i]) ;
}
}
}
在Java.util 包中,有一個用於運算元組的實用類—java.util.Arrays。它提供了一系列靜態方法完成陣列的常用操作。
1.binarySearch(二分查詢):
表達形式:binarySearch(type[ ]a, int fromIndex, int toIndex, type key)
這個方法只搜尋a 陣列中fromIndex 到toIndex索引的元素。呼叫該方法時要求陣列中的元素已經按升序排列,這樣才能得到正確的結果。
2.copyOf(拷貝):
表達形式:type[ ] copyOf(type[ ]original, int newLength)
這個方法會把original陣列複製成一個新陣列,其中length是新陣列的長度,如果Length小於original陣列的長度,則新陣列就是原陣列前面的length個元素;如果Length大於original陣列的長度則新陣列前面的元素就是原陣列的所有元素,後面補充0(數值型),false(布林型),null(引用型)。
3.copyOfRange
表達形式如下: type[ ] copyOfRenge(type[ ] orange, int from, int to)
這個方法與前面的方法相似,但這個方法只複製了original陣列的from索引到to索引的元素。
4.equals(相等)
表示式如下: boolean equals(type[] a,type[] a2)
如果a陣列和a2陣列的長度相等,而且a陣列和a2陣列的元素也一一相同,則該方法返回true。
5.fill(填充)
表達形式如下: void fill(type[] a,type val)
該方法會把a陣列所有元素都賦值為val。另一個表達形式如下:
void fill(type[] a, int fromIndex, int toIndex , type val)
該方法與前一個方法的作用下相同,區別只是該方法僅僅將a陣列的fromIndex到toIndex索引的陣列元素賦值為val。
6.sort(排序)
表達形式如下: void sort(type[] a)
該方法對a陣列的陣列元素進行排序。另一個表達形式如下:
void sort(type[] a, int fromIndex, int toIndex)
該方法與前一個方法相似,區別是該方法僅僅對fromIndex 到toIndex索引的元素進行排序。
7.toString(轉換為字串)
表達形式如下:String toString(type[] a)
該方法將一個數組轉換成一個字串。該方法按順序把多個數組元素連綴在一起,多個數組元素使用英文逗號(,)和空格隔開。(利用該方法可以很清楚看到各陣列元素。)