一、一维数组
1、动态初始化声明并初始化数组:
数据类型[ ] 数组名称 = new 数据类型 [长度] ;
如:int [ ] intArray = new int [ 3 ];
分步进行数据初始化:
int[ ] intArray = null;
intArray = new int [ 3 ];
数组开辟空间后,可进行如下操作:
- 数组的访问通过索引来完成。同C
- 数组每个元素都是该数据类型的默认值。
- 数组的内容操作往往采用循环来进行。
- 动态取得数组长度的方法:数组名称.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);
}