目录
3.1 概述
-
是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
-
数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
-
创建数组对象会在内存中开辟一整块 连续的 空间,而数组名中引用的是这块连续空间的首地址。
(列表的空间是不连续的)
-
数组的长度一旦确定,就不能修改。
3.2 一维数组
1. 声明和初始化
-
声明:type[] var 或 type var[]
注:
Java语言中声明数组时不能指定其长度,例如 int a[5];
-
初始化:
1) 静态初始化:数组的初始化和数组元素的赋值操作同时进行。
ids = new int[]{1,2,3,4};
2) 动态初始化:数组的初始化和数组元素的赋值操作分开进行。
String[] names = new String[5];
2. 调用指定位置元素
通过索引的方式调用。数组的索引从0到length-1。
names[0], names[1], ...
3. 获取数组长度
属性:length 例:names.length (输出5)
4. 遍历
for(int i=0; i < names.length; i++){
System.out.println(names[i]);
}
5. 默认初始化值
数组是引用类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化。
-
对于基本数据类型而言,默认初始化值各有不同。
-
对于引用数据类型而言,默认初始化值为null。
6. 内存解析
内存结构:
举个例子:
3.3 多维数组
(以二维数组为例)
对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。
其实,从数组底层的运行机制来看,其实没有多维数组。
1. 声明和初始化
1) 静态初始化:
int[][] arr = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
//类型推断
2) 动态初始化:
String[][] arr2 = new String[3][2];
String[][] arr2 = new String[3][];
2. 调用指定位置元素
arr[0][1]
注:
String[][] arr2 = new String[3][];
调用arr2[1][1]; //空指针异常,
//未初始化arr2[1]
arr2[1] = new String[4];
调用arr2[1][1]; //正确
3. 获取数组长度
int[][] arr = new int[][]{{1,2,3},{4,5},{7,8,9}};
arr.length
—
> 3
arr
[0]
.length —> 3
arr
[1]
.length —>
2
4. 遍历
for(int i=0; i < arr.length; i++){
for(int j = 0; j < arr[i].length; j++){
System.out.print(arr[i][j]);
}
}
5. 默认初始化值
int[][] arr = new int [4][3];
arr[0]
—
> 外层元素存放地址值(如:[I@15db9742)
注:
一个
’
[
’
表示一维,I表示int型,@后为地址
arr[0][0]
—
> 内层元素与一维数组相同(初始值为0)
6. 内存解析
3.4 数组中涉及到的常见算法
1. 数组元素的赋值(杨辉三角、回形数等)
2. 求数值型数组中元素的最大值、最小值、平均数、总和等
3. 数组的复制、反转、查找(线性查找、二分法查找)
注:
数组赋值不能直接使用数组名赋值,如arr2 = arr; arr和arr2指向同一地址。可以采用遍历赋值。
4. 数组元素的排序算法
3.5 Arrays工具类使用
java.util.Arrays
类即为操作数组的工具类,包含了用来操作数组(比如排序和搜索)的各种方法。
更多方法可以见API。