数组是具有相同类型的一种数据的集合,按照维度可分为一维数组、二维数组和多维数组
数据类型
数组是引用类型(即是对象类型),数组名字并非数组空间,而是对数组空间的一个引用变量(类似指针)
声明方式
- 数组元素类型可以是Java中的任意数组类型,包括基本类型和非基本类型
- 数组名字是合法的标识符;一个[]表示数组的一维)
int array1Name[]; //一维数组
Object[] array2Name; //一维数组
Integer array3Name[][]; //二维数组
CustomClass[][] array4Name; //二维数组
Void[] array5Name[]; //二维数组
- 注意,上述为声明,并未给数组分配实际内存空间。
- 创建并分配内存空间
int array1Name[] = {1, 2, 3}; // 分配并初始化一维数组
int array2Name[] = {{1, 2, 3}, {4, 5}}; // 分配并初始化二维数组
int array3Name[] = new int[3]; // 声明并分配长度为 3 * 4 字节的数组
array3Name = new int[5]; // 方法执行时分配长度为 5 * 4 个字节的数组
- 分配内存但未初始化时,数组中各个元素的初始化值都为0
二维数组
- 二维数组可以看成一维数组的数组。
- 数组名是一个引用变量,其指向一个数组空间,空间里都是引用变量,这些变量就是第一维
- 第一维的每个引用变量各自再指向一个数组空间,这个数组空间就是第二维,也就是真正的数组元素类型组成的空间
- 多维数组,每一维的长度不一定要相同。如二维数组的第二维由数组元素类型组成的空间可以是不同长度的
内存模型
- 一维数组
Object arr = new Object[4];
image.png
- 二维数组
int a[][] = {{1, 2,}, {3, ,4 5}};
image.png
访问
- 访问数组元素:arrayName[index]
- 下标index从0开始
- 数组空间是固定长度的(分配空间时确定),空间元素内容可以改变
- 填空替换:Arrays.fill
- fill(数据类型[] 数组名字, 数据类型 value)
- fill(数据类型[] 数组名字, int formIndex, int toIndex, 数据类型 value)
- 直接在原数组上操作
- 排序:Arrays.sort(升序)
- sort(数据类型[] 数组名字)
- sort(数据类型[] 数组名字, int formIndex, int toIndex)
- 直接在原数组上操作
- Arrays.copyOf
- copyOf(数据类型[] 数组名字, int 新数组长度)
- 新数组长度超过原数组,多的用0填充;从下标0开始拷贝
- 返回值为新数组
- 复制:Arrays.copyOfRange
- Arrays.copyOfRange(数据类型[] 数组名字, int fromIndex, int toIndex)
- fromIndex必须在原数组下标范围内;toIndex可以超过原数组长度;拷贝时不包括toIndex(闭开区间)
- 返回值为新数组