一、数组的特点和好处
1、 数组的特点
1、数组存储的是相同类型的一组元素
double[] arr = {1.6,2.3,1,2,'a'};
2、数组的定义类型可以是任意类型,包含基本类型或引用类型
String[] arr = {"john","lucy"};
Person[] arr;
int[][] arr;
Person[][] arr;
3、数组属于引用类型,引用存储在栈中,值存储在堆中,又称为对象。
4、数组的成员如果不赋值,有默认值。
byte/short/int/long——>0
float/double——>0.0
char——>\u0000
boolean——>false
String——>null
5、数组的四要素
数据类型、标识符、元素、下标(0------数组名.length-1)
2、 数组的好处
说明:相当于用于保存一组元素的容器
好处:
1、提高代码的简洁性和扩展性,且同时开辟多个空间,提高了效率
2、分类存储,且空间是连续的,容易查找
二、数组的语法和使用步骤
1、 动态初始化
针对题型:声明时不确定值是什么
步骤1、声明
数据类型[] 数组名;或
数据类型 数组名[];
步骤2、开辟空间
数组名 = new 数据类型[长度];//长度不能省略
步骤3、赋值
方式一:一个个赋值
数组名[下标] = 值;
方式二:循环赋值
for(int i=0;i<数组名.length;i++){
数组名[i] = 值;
}
步骤4、使用
System.out.println(数组名[下标]);
2、 静态初始化
针对题型:声明时就知道值是什么
步骤1、声明并初始化
数据类型 数组名[] = new 数据类型[]{值,值,值};或
数据类型[] 数组名 = {值,值,值};
步骤2、使用
3、 使用注意事项
①数组的下标:0------arr.length-1,如果超出范围,则报ArrayIndexOutOfBoundsException
②数组的成员如果不手动赋值,也有默认值
int------0
double------0.0
char------\u0000
boolean------false
引用类型------null
三、数组的使用
1、 正序打印
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
2、逆序打印
for(int i=arr.length-1;i>=0;i--){
System.out.println(arr[i]);
}
3、 求和、平均值
int sum = 0;
for(int i=0;i<arr.length;i++){
sum+=arr[i];
}
sum:和 aum/arr.length平均值
4、 求最值
int max = arr[0];
int indexMax = 0;
int min = arr[0];
int indexMin = 0;
for(int i=1;i<arr.length;i++){
if(arr[i]>max){
max = arr[i];
indexMax = i;
}
if(arr[i]<min){
min = arr[i];
indexMin = i;
}
}
max:最大值
min:最小值
5、 查找
int index=-1;
for(int i=0;i<arr.length;i++){
if(arr[i]==带查找的元素){
index = i;
break;
}
}
if(index==-1){//没找到}else{找到了}
6、 排序
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int t = arr[j];
arr[j] = arr[j+1];
arr[j+1]=t;
}}
7、赋值
特点:
基本类型变量的赋值:赋的是值,其中一个更改不影响另外一个
引用类型变量的赋值:赋的是地址,二者共同引用一个空间,其中一个更改影响另外一个
如果希望赋的是值(内容),则可以采用循环赋值
方式一:传统的使用 = 赋值
newArr = arr;
方式二:循环赋值
①创建新数组,长度=旧数组.length
int[] newArr = new int[arr.length];
②循环将旧数组的元素依次赋值给新数组的每个成员
for(int i=0;i<newArr.length;i++){
newArr[i] = arr[i];
}
四、二维数组
1、特点
二维数组本身属于也能用类型,保存的也是地址号
二维数组相当于多个一维数组的组合,也就是二维数组中的每个元素又是一个一维数组
2、使用步骤
(1)动态初始化
步骤1 :声明
格式1:数据类型[][] 数组名;
格式2:数据类型[] 数组名[];
格式3:数据类型 数组名[][];
步骤2:开辟空间
格式1:固定列数
数组名 = new 数据类型[行数][列数];//行数相当于二维数组的长度或一维数组的个数,列数相当于每个一维数组中的成员个数
格式2:不固定列数
数组名 = new 数据类型[行数][];
前两步可以合二为一
语法示例:
int[][] arr = new int[5][];
步骤3:赋值
格式1:固定列数
for(int i=0;i<数组名.length;i++){
for(int j=0;j<数组名[i].length;j++){
数组名[i][j] = 值;
}
}
格式2:不固定列数
for(int i=0;i<数组名.length;i++){
数组名[i]=new 数据类型[长度];//长度不能省略!
for(int j=0;j<数组名[i].length;j++){
数组名[i][j] = 值;
}
}
步骤4、使用
for(int i=0;i<数组名.length;i++){
for(int j=0;j<数组名[i].length;j++){
System.out.println(数组名[i][j]);
}
}
(2)静态初始化
步骤1、声明并初始化
数据类型[][] 数组名 ={{值,值},{值,值,值}};或
数据类型[][] 数组名 =new 数据类型[][]{{值,值},{值,值,值}};
步骤2、使用
for(int i=0;i<数组名.length;i++){
for(int j=0;j<数组名[i].length;j++){
System.out.println(数组名[i][j]);
}}