Java 中数组的使用
1.数组的使用方式
1.1 数组的定义
1.1.1 动态初始化
- 数据类型 数组名[] = new 数据类型[大小]
- 先声明数组,再 new 分配空间
1.1.2 静态初始化
语法: 数据类型 数组名[] = {元素值,元素值,······}
1.2 数组使用的注意事项和细节
- 数组是多个相同类型数据的组合,实现对这些数据的统一管理
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
- 数组创建后,如果没有赋值,有默认值
int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000,boolean false,String null - 使用数组的步骤 1. 声明数组并开辟空间 2. 给数组各个元素赋值 3. 使用数组
- 数组的下标是从 0 开始的。
- 数组下标必须在指定范围内使用,否则报:下标越界异常,int [] arr=new int[5]; 则有效下标为 0-4
- 数组属引用类型,数组型数据是对象(object)
1.3 数组的赋值机制
- 基本数据类型赋值,这个值就是具体的数据,而且相互不影响。
int n1 = 2; int n2 = n1; - 数组在默认情况下是引用传递,赋的值是地址。
看一个案例,并分析数组赋值的内存图(重点, 难点. )
可以看到,进行 arr2 = arr1 的操作时,arr2 获取的是 arr1 的地址,arr2 并没有单独再开辟一个新的空间,而是指向 arr1 所开辟的空间。所以,改变 arr2 中的值,arr1 中也会同步改变。
1.4 数组添加/扩容
要求: 实现动态的给数组添加元素效果,实现对数组扩容。
- 原始数组使用静态分配 int[] arr = {1,2,3}
- 增加的元素 4,直接放在数组的最后 arr = {1,2,3,4}
- 用户可以通过如下方法来决定是否继续添加,添加成功,是否继续?y/n
思路总结:
- 创建一个新数组 arrNew, 在其初始化时实现对数组长度的调整。
- 把原数组 arr 拷贝给 arrNew 数组。
- 在 arrNew 的基础上,实现对其的添加/缩减。
- 执行操作 arr = arrNew , 使 arr 指向 arrNew 所表示数组,arr 原指向数组则失去引用被自动回收。
2.二维数组的使用
2.1 二维数组的内存形式
理解: 二维数组的每个元素是一个一维数组。
2.2 二维数组的定义
2.2.1 动态初始化
- 语法: 类型[]\[] 数组名 = new 类型[大小]\[大小]
- 先声明,再分配空间
- 列数不确定
要求: 动态创建下面二维数组,并输出。
j = 0 | j = 1 | j = 2 | |
i = 0 | 1 | ||
i = 1 | 2 | 2 | |
i = 2 | 3 | 3 | 3 |
思路分析:
- 创建二维数组,为其分配3个元素的空间,但是没有给每一个一维数组开辟空间
- 根据需求,动态的为其每一个一维数组开辟空间
2.2.2 静态初始化
定义 类型 数组名[][] = {{值 1,值 2..},{值 1,值 2..},{值 1,值 2..}}
解读:
- 定义了一个二维数组 arr
- arr 有三个元素(每个元素都是一维数组)
- 第一个一维数组有 3 个元素 , 第二个一维数组有 3 个元素, 第三个一维数组有 1 个元素
2.3 二维数组的注意事项及细节
- 一维数组的声明方式有:
- 二维数组的声明方式有: int[]\[] y 或者 int[] y[] 或者 int y[]\[]
- 二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。
比如: map[][] 是 一个二维数组 int map [][] = {{1,2},{3,4,5}}
由 map[0] 是一个含有两个元素的一维数组 ,map[1] 是一个含有三个元素的一维数组构成,
我们也称为列数不等 的二维数组。