数组概述及格式
- 数组:同一种类型数据的集合。其实数组就是一个容器
- 只要是容器,就得重点掌握
- 数组的好处
- 可以自动给数组中的元素从0开始编号,方便操作这些元素
- 数组的定义格式
A:当不明确数组中的元素时,动态初始化
int[] arr = new int[3];
arr[0] = 3;
B:当明确数组中的元素时,静态初始化
int[] arr = new int[] { 1, 2, 3, 4, 5 };
int[] arr = { 1, 2, 3, 4, 5 };
- 什么时候使用数组?
- 当要操作的同种数据类型的数据是多个的时候
数组的内存图
- A:栈
- 存储的是局部变量(在函数中定义的变量)
- 变量被使用完后,立即自动释放
- B:堆
- 存储的是实体(数组和对象)
- 实体:new出来的东西,可以存放很多数据的东西
- 堆内存数据的特点
- 每个实体都有内存地址
- 堆内存中的变量都有默认初始化值
- int --> 0
- double --> 0.0
- boolean --> false
- char --> '\u0000' 空字符,unicode编码
- 当实体不在被使用的时候,会在jvm空闲的时候,通过java垃圾回收机制使其自动释放
- C:方法区:static
- D:本地方法区:调用是Windows系统底层资源,我们不用考虑
- E:寄存器:和CPU相关。我们不用考虑
数组的常见问题
- A:当你访问到数组中的最后一个元素时,还想继续访问,这个时候,会发生角标越界异常
- ArrayIndexOutOfBoundsException
- B:当数组不在指向某个实体时,你还继续访问,就会发生空指针异常
- NullPointerException
数组的操作
- 遍历
- 最值
- 查找
- 排序
- 数组的参数传递
二维数组概述和定义
- 格式1:int[][] arr = new int[3][2];
- A:定义了名称为arr的二维数组
- B:二维数组中有3个一维数组
- C:每一个一维数组中有2个元素
- D:一维数组的名称分别为arr[0], arr[1], arr[2]
- arr:二维数组名
- arr[1]:二维数组中的第二个一维数组名
- arr[1][1]:二维数组中的第二个数组的第二个元素
- E:给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;
- 格式2:int[][] arr = new int[3][];
- A:二维数组中有3个一维数组
- B:每个一维数组都是默认初始化值null
- C:可以对这个三个一维数组分别进行初始化
- arr[0] = new int[3];
- arr[1] = new int[5];
- arr[2] = new int[7];
- 格式3:int[][] arr = { { 3,8,2 }, { 2,7 }, { 9,0,1,6 } }; arr[2].length;
- A:二维数组有3个一维数组
- B:
- 第一个一维数组有3个元素
- 第二个一维数组有2个元素
- 第三个一维数组有4个元素
二维数组的应用
- 二维数组的遍历
int[][] arr2 = new int[2][3];
public static void printArray2(int[][] arr2) {
for(int i=0; i<arr2.length; i++) {
for(int j=0; j<arr2[i].length; j++) {
System.out.print(arr2[i][j]+" ");
}
System.out.println();
}
}
- 二维数组的应用
// 求一年的销售总额
public static void printArray2(int[][] arr2) {
int sum = 0;
for(int i=0; i<arr2.length; i++){
for(int j=0; j<arr2[i].length; j++) {
sum = sum + arr[i][j];
}
System.out.println("sum =" + sum);
}
}