【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);
  }

猜你喜欢

转载自blog.csdn.net/cottonrose_orange/article/details/85173425