数组的本质---C语言 一连串的内存单元
数组的三个基本特性
1、一致性:元素数据类型是一致的
2、有序性:数组中元素是有序的,通过下标访问
3、不可变性:数组一旦初始化,长度不可变
(可变长度数组实际上是一种数据类型,牺牲性能换取可变 aray list)
JAVA中的数组本身是引用数据类型,长度属性是length
9.1 一维数组
静态初始化
//静态初始化
int[] intArray1 = { 21, 22, 23 };
String strArray1[] = { "王一", "王二", "王三", "王五" };
动态初始化
int intArray[];
//动态初始化int数组
intArray = new int[4];
intArray[0] = 20;
intArray[1] = 21;
intArray[2] = 22;
案例:数组合并
// 两个待合并的数组
int array1[] = { 20, 10, 30, 40, 50 };
int array2[] = { 1, 2, 3 };
// 动态初始化新的数组
int array[] = new int[array1.length + array2.length];
// 循环添加数组元素
for (int i = 0; i < array.length; i++) {
if (i < array1.length) {
array[i] = array1[i];
} else {
array[i] = array2[i - array1.length];
}
}
System.out.println("合并完成");
for (int item : array) {
System.out.println(item);
}
9.2 二维数组
1. 静态初始化
int intArray[][] = { { 1, 2, 3 }, { 11, 12, 13 }, { 21, 22, 23 }, { 31, 32, 33 } };
2. 动态初始化
new 元素数据类型【高维数组长度】【低维数组长度】;
int[][] intArray = new int[4][3];
//静态初始化二维数组
int[] intArray[] = {
{ 1, 2, 3 },
{ 11, 12, 13 },
{ 21, 22, 23 },
{ 31, 32, 33} };
//动态初始化二维数组
double[][] doubleArray = new double[4][3];
//计算数组intArray 元素的平方给给根,结果保存到 doubleArray
for (int i = 0; i < intArray.length; i++) {
for(int j = 0; j < intArray[i].length; j++) {
doubleArray[i][j] = Math.sqrt(intArray[i][j]);
}
}
for (int i = 0; i < doubleArray.length; i++) {
for (int j = 0; j < doubleArray[i].length; j++) {
System.out.printf("[%d][%d] = %f", i, j, doubleArray[i][j]);
System.out.print('\t');
}
System.out.println();
}
3. 不规则数组
1)静态初始化
int intArray[][] = { { 1, 2 }, { 11 }, { 21, 22, 23 }, { 31, 32, 33 } };
2) 动态初始化
int intArray[][] = new int [4][]; //先初始化高维数组
//逐个初始化低维数组
intArray[0] = new int[2];
intArray[1] = new int[1];
intArrsy[2] = new int[3];
3) 不规则数组访问
下标越界:
int intArray[][] = new int[4][]; // 先初始化高维数组
intArray[0] = new int[2];
intArray[1] = new int[1];
intArray[2] = new int[3];
intArray[3] = new int[3];
// for循环遍历
for (int i = 0; i < intArray.length; i++) {
for (int j = 0; j < intArray[i].length; j++) {
intArray[i][j] = i + j;
}
}
// for-each 循环遍历
for (int[] row : intArray) {
for (int column : row) {
System.out.print(column);
System.out.print('\t');
}
System.out.println();
}
0 1
1
2 3 4
3 4 5