1. 程式人生 > >【java】陣列及相關練習

【java】陣列及相關練習

一、一維陣列

1、動態初始化宣告並初始化陣列:
資料型別[ ] 陣列名稱 = new 資料型別 [長度] ;   
如:int [ ] intArray = new int [ 3 ];   

分步進行資料初始化:

int[ ] intArray = null;    
intArray = new int [ 3 ];

陣列開闢空間後,可進行如下操作:

  1. 陣列的訪問通過索引來完成。同C
  2. 陣列每個元素都是該資料型別的預設值。
  3. 陣列的內容操作往往採用迴圈來進行。
  4. 動態取得陣列長度的方法:陣列名稱.length;

注:變數在棧上存放,資料在堆上存放。(除基本資料型別外)

2、引用傳遞

引用傳遞空間:同一塊堆記憶體空間可以被不同的棧記憶體所指向。
多個棧記憶體指向相同的堆記憶體
如:

	int[] x = null;    
	int[] tmp = mull;
    	x = new int[3];    
    	tmp = x;   //引用傳遞

注:如果要發生引用傳遞,不要出現[ ]

記憶體使用空間如下:

在這裡插入圖片描述
如果x和temp同時為null了,則說明堆記憶體的這段空間不使用了,系統會認為這段空間是垃圾空間,自動回收了。

3、陣列靜態初始化

兩種格式:

1. 資料型別 陣列名稱 = {值,值,....}
2. 資料型別[] 陣列名稱 = new 資料型別[] {值,值,....}

注:相關型別、型別轉換(小可轉大,大不可轉小)。

4、匿名陣列
如:System.out.println(new char[]{'A','B'});   

因為println(Object o); //型別為物件

二、二維陣列

1、動態初始化
資料型別[][] 物件陣列 = new 資料型別[行個數][列個數] ;
如:int[][] intArray= new int[2][2];
2、靜態初始化
資料型別[][] 物件陣列 = new 資料型別[][]{{值,值,..},{值,值,..},..} ;
如:int[][] intArray = new int[][]{{1,2,3},{4,5,6,7}}

注:沒有用的空間不會被填充
檢視二維陣列行數:

intArray.lenth 

檢視二維陣列這一行有多少個元素

intArray[i].lenth  

三、陣列與方法互操作

方法接收陣列

	方法接收的是陣列的地址值

方法返回陣列

	方法返回一個新陣列

四、物件陣列

動態初始化

類名稱[] 物件陣列名稱 = new 類名稱[長度] ;

靜態初始化

類名稱[] 物件陣列名稱 = new 類名稱[長度] {new 類名稱,new 類名稱,new 類名稱};

陣列練習

1、計算陣列中最大值
//1.計算陣列中最大值
  public static int arrayMaxElement(int[] data){
	int i = 0 ;
	int max = data[0];
	for(i=0; i<data.length; i++){
  		 if(data[i]>max){
    		  max = data[i];
  		 }
	}
      return max;
  }
2、計算陣列中最小值
//2.計算陣列中最小值
  public static int arrayMinElement(int[] data){
	int i = 0;
	int min = data[0];
	for(i=0; i<data.length; i++){
   		if(data[i]<min){
   		   min = data[i];
  		 }
	}
      return min;
  }
3、計算陣列值之和
//3.計算陣列值之和
  public static int arrayElementSum(int[] data){
	int i = 0;
	int sum = 0;
	for(i=0;i<data.length;i++){
   		sum = sum + data[i];
	}
      return sum;
  }
4、陣列拼接
//4.陣列拼接
  public static int[] arrayJoin(int[] a, int[] b){
	int[] c = new int[a.length+b.length];
	int i = 0;
	int j = 0;
	for(i=0; i<a.length; i++){
   		c[i] = a[i];
	}
	for(i=a.length,j=0; i<a.length+b.length; i++,j++){
  	 	c[i] = b[j];
	}
      return c;
  }
5、陣列擷取
//5.陣列擷取
  //[start, end)
  public static int[] arraySub(int[] data, int start , int end){
	if((start<0)||(end>0)||(end-start>data.length)||(start>end)){
   		System.out.println("擷取失敗");
   		return data;
	}	
	int[] b = new int[end-start+1];
	int i = 0;
	for(i=0; start<=end; i++){
   		b[i] = data[start++];
	}
      return b;
  }
6、陣列列印
//6.陣列列印
  public static void printArray(int[] data){
	int i = 0;
	for(i=0; i<data.length; i++){
   		System.out.print(data[i]+" ");
	}
	System.out.println();
  }
7、陣列反轉
//7.陣列反轉
  // 比如:[1,2,3,4] => [4,3,2,1]
  public static void printReversal(int[] data){
  	int left = 0;
	int right = data.length-1;
	int tmp = 0;
	while(left<right){
   		tmp = data[left];
   		data[left] = data[right];
   		data[right] = tmp;
   		left++;
   		right--;
	}
	printArray(data);
  }