Java Array
一、简介
1、概念
Java 语言中提供的数组是用来存储固定大小的同类型(基本数据类型/引用数据类型)元素。
数组本身是引用类型。
数组是同一种数据类型的集合
数组中的每个数据称为数组元素,按从0~数据个数-1的索引/下标来访问每个元素
2、数组的好处
-
当数据量大时,可以 同时开辟多个空间,语句更加简洁,且提高效率
-
数组中的空间都是连续的,便于查找
-
对于处理数据(增,删,查,改)非常便利
3、特点
-
数组中保存引用类型时保存的是对象引用,基本数据类型数组保存基本数据的值。
-
数组的length只表示数组能够容纳多少元素,不能保存实际保存的元素个数。
-
数组的长度是固定的, 只可以存储固定个数的数据 。
二、数组的创建
- 声明数组的两种方式
int a [];
int [] a;
在Java中两种声明方式效果相同,但是尽量使用第二种(int [] a),以避免混淆数据类型
见代码:
int[] a= new int[5], //推荐 数组a
b=new int[5], // 数组b
c=new int[20]; // 数组c
int x[], //易混淆 数组 : x
y,z; // 数值,数值 : y z
- 数组创建的三种方式
int [] b=new int[5];//1.声明数组同时,根据指定长度分配内存,此处所有元素都初始化为默认值(0)
int [] c=new int[]{1,2,3,4,5};//2.声明数组,分配内存,同时将其初始化
int [] a={1,2,3,4,5};//3.直接对数组初始化赋值,与2方式相同
这里的2,3都是静态创建,直接为其赋值初始化
1是动态创建,只为其分配内存,而不初始化,可搭配for或while为其赋值
int [] a=new int[10];//动态创建,分配指定内存
for(int i=0;i<a.length;i++){//数组的下标从0开始到length-1,这里的length=10-1=9
a[i]=i+7;//将7的倍数赋给每个元素
}
三、数组的访问与迭代
数组的访问通过下标/索引来进行
a[0];//第一个元素
a[1][2];//二维数组中第二行,第三列对应的元素
注意:
-
数组的索引从0开始。
-
索引的数据类型是整型 。
-
索引最大值和数组长度始终差1 。
数组的访问方式
1、for循环
int [] a=new int[10];//动态创建,分配指定内存
for(int i=0;i<a.length;i++){//数组的下标从0开始到length-1,这里的length=10-1=9
a[i]=i+7;//将7的倍数赋给每个元素
}
for(int i=0;i<a.length;i++){//数组的下标从0开始到length-1,这里的length=10-1=9
System.out.println(a[i]);//访问每个数组元素
}
2、foreach
foreach 也称增强for循环
/*
foreach:
for([数据类型] 变量名 : 数组名 ){
//变量的数据类型字节可以比数组存储的数据类型字节大,但不能小
System.out.println(变量名);
}
遍历一维数组每个元素
将值赋给临时变量
输出每个临时变量
*/
int [] a=new int[5];
for(double temp:a){//double>int 合法
System.out.println(temp);//访问每个数组元素
}
double [] b=new double[5];
for(int y:b){
/*
int< double 报错:
Required type:double
Provided:int
*/
System.out.println(y);
}
四、二维数组
二维数组:{{1,2,3},{4,5,6},{7,8,9}}
二维数组的本质是一维数组,每个元素都是一个一维数组
1.二维数组的声明
int [][] a;
int b[][];
//与一维数组一样,这里依旧推荐int[][] a这种写法
//a[行下标][列下标] a[1][2]-->第2行第3列的元素
2.二维数组的创建
int [][] a=new int[3][3];//分配3行3列的内存,默认初始化为0
int [][] c=new int[][]{{1,2,3},{4,5,6}};//静态赋值初始化为2行3列
int [][] b={{1,2,3},{4,5,6}};//静态赋值初始化为2行3列
使用for循环对二位数组进行初始化
int [][] a=new int[5][5];//动态创建一个5行5列数组
for(int i=0;i<a.length;i++){//从行下标开始,0~length-1
for (int j = 0; j < a[i].length; j++) {//a[i].length=每一行对应的列数长度
a[i][j]=i+j;//将索引之和赋给相应元素
}
}
3.二维数组的访问
int [][] a=new int[5][5];//动态创建一个5行5列数组
for(int i=0;i<a.length;i++){//从行下标开始,0~length-1
for (int j = 0; j < a[i].length; j++) {//a[i].length=每一行对应的列数长度
a[i][j]=i+j;
}
}
//for循环遍历
for(int i=0;i<a.length;i++){
for (int j = 0; j <a[i].length ; j++) {
System.out.print(a[i][j]+"\t");
}
System.out.println();
}
System.out.println();
//foreach遍历
for (int[] x:a){
//将二维数组a的每个元素({1,2,3,4,5},本质是一维数组)拿出赋给一维数组x
for(int y:x){//遍历一维数组x中每个元素,赋给变量y
System.out.print(y+"\t");//输出每个y
}
System.out.println();
}
运行结果:(一样)
for与foreach适用环境
-
foreach适用于循环次数未知,或者计算循环次数比较麻烦情况下使用效率更高
-
对于更复杂的循环,for更灵活
-
用foreach时,只能对存储引用类型的数组修改,不能修改存储基本类型的数组
本人新✋,初来乍到,:✒️此拙作以记录学习中的知识点滴,若能帮助到同在学习的新手,不甚荣幸.若有不对的地方,还请各位大佬斧正,不吝赐教🙏🙏🙏!