1. 程式人生 > >盤點JAVA對陣列的支援,以及陣列實用Arrays.

盤點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對陣列的支援

在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)

該方法將一個數組轉換成一個字串。該方法按順序把多個數組元素連綴在一起,多個數組元素使用英文逗號(,)和空格隔開。(利用該方法可以很清楚看到各陣列元素。)