1. 数组的使用
1.1 数组类型声明
基本数据类型 和 引用数据类型 的数组声明方式相统。
- 一维:
- 基本数据类型:
double[] a
或double a[]
- 引用数据类型:
String[] s
或String s[]
- 二维:
- 基本数据类型:
double[][] a
、double a[][]
、double[] a[]
- 引用数据类型:
String[][] s
、String s[][]
、String[] s[]
- 注意:
int[] x, y[];
x是一维数组,y是二维数组。- 存在引用数据类型类型,为什么还要Array这种数组工具类?因为工具类的方法更丰富,一些功能不需要自己实现,直接调用方法即可。
1.2 初始化数组
静态
初始化:用于知道所有初始值的情况。
1. 一维。int[] a = {1, 2, 3, 4};
、int[] a = new int[]{1, 2, 3, 4};
2. 二维。int[][] a = {{1, 2, 3, 4}, {5, 6, 7, 8}};
、int[][] a = new int[][]{{1, 2, 3, 4}, {5, 6, 7, 8}};
动态
初始化
- 直接分配。
- 一维:
double[] a = new double[5]
- 二维:
double[][] a = new double[5][3]
- 先声明,再分配。
1.3 数组长度
- 一维:
a.length
- 二维:
a.length
是总行数,a[i].length
是i行的总列数常用于遍历数组:
1.4 二维数组的空间分配
注意:
二维数组空间不一定是整体连续的。
行内是连续的,行与行间不一定连续。也就是一维数组之间不一定连续。
2. 二维不定长数组
- 静态:
int[][] a = {{1, 2, 3}, {5}};
- 动态:
int[][] arr = new int[3][];
/*
动态实现不定长二维数组:1
1 2
1 2 3
*/
int[][] arr = new int[3][]; // 声明不定长二维数组
for (int i = 0; i < arr.length; i++) {
// 分配一维行空间
arr[i] = new int[i+1];
// 赋值
for (int j = 0; j < arr[i].length; j++)
arr[i][j] = j + 1;
}
// 遍历数组,并打印
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++)
System.out.print(arr[i][j] + " ");
System.out.println();
}
3. 练习
4. 关于数组的向上/下转型 与 类型强转
- 数组的强转转换只能发生在子类与父类之间,不可发生在无关系的类间强转。
- 数组随时可以向上转型和向下转型。