五、数组
1,数组概述及格式
- 数组:同一种类型数据的集合。其实数组就是一个容器。
- 只要是容器,就得重点掌握。
- 数组的好处
- 可以自动给数组中的元素从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};
- 什么时候使用数组?
- 当要操作的同种数据类型的数据是多个的时候,你就得想着先把这些数据用数组进行存储。
2.数组的内存图
- A:栈
- 存储的是局部变量(在函数中定义的变量)。
- 变量被使用完后,立即自动释放。
- B:堆
- 存储的是实体(数组和对象)。
- 实体:new出来的东西,可以存放很多数据的东西。
- 堆内存数据的特点
- 当实体不在被使用的时候,会在jvm空闲的时候,通过java垃圾回收机制使其自动释放。
- 堆内存中的变量都有默认初始化值
- char --> '\u0000' 空字符,unicode编码。
- boolean --> false
- double --> 0.0
- int --> 0
- 每个实体都有内存地址
- C:方法区 后面讲。(static)
- D:本地方法区 调用是Windows系统底层资源,我们不用考虑。
- E:寄存器 和CPU相关。我们不用考虑。
3.数组的常见问题
- A:当你访问到数组中的最后一个元素时,还想继续访问,这个时候,会发生角标越界异常。
- ArrayIndexOutOfBoundsException
举例
int[] arr = new int[3];
System.out.println(arr[3]);
- B:当数组不在指向某个实体时,你还继续访问,就会发生空指针异常。
- NullPointerException
举例
int[] arr = new int[3];
arr = null;
System.out.println(arr[1]);
4.数组的操作
- 数组遍历
- 数组获取最值
- 基本查找
- 数组的参数传递
5.数组的练习
- 数组反转
6.数组的应用
- 查表法(星期的示例)
7.二维数组概述和定义
- 格式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个元素
8.二维数组的应用
- 二维数组的遍历
• 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);
}
}