概括
- 数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
-
数组本身是 引用数据类型 ,而数组中的元素可以是 任何数据类型 ,包括基本数据类型和引用数据类型。
-
创建数组对象会在内存中开辟一整块 连续的空间 ,而数组名中引用的是这块连续空间的首地址。
-
我们可以直接通过下标 ( 或索引 ) 的方式调用指定位置的元素,速度很快。
-
数组的长度一旦确定,就不能修改。
-
数组的分类:按照维度:一维数组、二维数组、三维数组、 …按照元素的数据类型分:基本数据类型元素的数组、引用数据类型元素的数组 ( 即对象数组)
-
一维数组
初始化
静态初始化:数组的初始化和数组元素的赋值操作同时进行
int[] arr = new int[]{11,22,33,44};//格式1
int[] arr1 = {11,22,33,44};//格式2
动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[] arr3 = new String[3];//方式1
String arr4[] = new String[4];//方式2
获取数组指定位置元素
通过角标的方式调用。数组的角标(或索引)从0开始的,到数组的长度-1结束。
String[] name = {"张三","李四","王五","赵六"};
System.out.println(name[0]);//张三
System.out.println(name[1]);//李四
System.out.println(name[2]);//王五
System.out.println(name[3]);//赵六
获取数组的长度
String[] name = {"张三","李四","王五","赵六"};
System.out.println(name.length);//4
遍历数组
int[] arr1 = {11,22,33,44};
for (int i = 0; i < arr1.length; i++) {
System.out.print(arr1[i] + "\t");//11 22 33 44
}
数组元素的默认初始化值
& 数组元素是整型:0 (long类型为0L)
& 数组元素是浮点型:0.0 ((float类型为0.0L))
& 数组元素是char型:0或'\u0000',而非'0'
& 数组元素是boolean型:false
& 数组元素是引用数据类型:null
数组的内存解析
一维数组的内存解析
test
从键盘读入学生成绩,找出最高分,并输出学生成绩等级。
成绩>=最高分-10 等级为’A’
成绩>=最高分-20 等级为’B’
成绩>=最高分-30 等级为’C’
其余 等级为’D’
Scanner s = new Scanner(System.in);
System.out.println("请输入学生人数:");
int number = s.nextInt();//使用scanner方法获取学生个数
int[] scores = new int[number];//根据学生人数,创建等长度数组
System.out.println("请输入" + number + "个学生的成绩:");
int maxScore = 0;//定义最高成绩变量
for (int i = 0; i < scores.length; i++) {
scores[i] = s.nextInt();
if (maxScore < scores[i]){ //获取数组中的元素的最大值:最高分
maxScore = scores[i];
}
}
//根据每个学生成绩与最高分的差值,得到每个学生的等级,并输出等级和成绩(该步需要单独遍历数组,不能放在上边的遍历中,因为最高分还未确定)
char level;
for (int i = 0; i < scores.length; i++) {
if (maxScore - scores[i] <= 10){
level = 'A';
}else if (maxScore - scores[i] <= 20){
level = 'B';
}else if (maxScore - scores[i] <= 30){
level = 'C';
}else{
level = 'D';
}
System.out.println("学生" + i + "成绩为:" + scores[i] + ",级别为:" + level);//输出学生成绩和等级
}
-
多维数组
二维数组初始化
静态初始化:
int[][] arr = new int[][]{{1,2,3},{4,5},{6,7,8}};
int[] arr1[] = new int[][]{{1,2,3},{4,5},{6,7,8}};
int arr2[][] = new int[][]{{1,2,3},{4,5},{6,7,8}};
int[][] arr3 = {{1,2,3},{4,5},{6,7,8}};
动态初始化:
int[][] arr4 = new int[4][3];
int[][] arr5 = new int[4][];
调用二维数组的指定位置的元素
int[][] arr3 = {{1,2,3},{4,5},{6,7,8}};
int[][] arr4 = new int[4][3];
int[][] arr5 = new int[4][];
System.out.println(arr3[1][1]);//5
System.out.println(arr4[1][1]);//0
System.out.println(arr5[0]);//null
获取二维数组的长度
int[][] arr11 = new int[][]{{1,2,3},{4,5},{6,7,8}};
int[][] arr12 = new int[4][3];
int[][] arr13 = new int[4][];
System.out.println(arr11.length);//3
System.out.println(arr12[1].length);//3
//System.out.println(arr13[1].length);//java.lang.NullPointerException
遍历二维数组
int[][] arr3 = {{1,2,3},{4,5},{6,7,8}};
for (int i = 0; i < arr3.length; i++) {
for (int j = 0; j < arr3[i].length; j++) {
System.out.print(arr[i][j] + "\t");
}
System.out.println();
}
二维数组元素的默认初始化值
方式一:如:int[][] arr = new int[4][3];
外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组初始化情况相同
方式二:如:int[][] arr = new int[4][];
外层元素的初始化值为:null
内层元素的初始化值为:不能调用,否则报错。
二维数组的内存解析
-
注
关于更多数组的内容,有兴趣的小伙伴可以看我这篇文章:
说明:本篇文章部分内容和图片引用尚硅谷官网内容,特此说明。@尚硅谷官网地址