JAVASE 【Java基础四之数组】
1.数组
- 1.1概念
一组相同类型数据的容器。
- 相同类型:Java语言要求存入数组的数据类型必须一致
- 容器:类似于生活中存放物品的容器,在编程的世界中,『容器』可以用来存放数据
- 一组:容器中可以存放多个数据
- 1.2声明数组变量
int[] ageArray;
String[] nameArray;
double salaryArray [];
虽然[]也可以放在变量名的后面,但是还是建议放在类型的后面。
// 声明数组时不能在方括号中指定数组长度
char[5] tipArray;
-
1.3创建数组对象
-
1.3.1 动态创建数组
ageArray = new int[5];
- 1.3.2静态创建数组
此时[]中不能写数字指定长度
nameArray = new String[]{"foo", "bar", "biz"};
也可以这么写:
int[] numberArray = {5, 7, 11, 13, 17, 19};
- 1.4将数据存入数组
ageArray[0] = 10;
ageArray[1] = 11;
ageArray[2] = 12;
ageArray[3] = 13;
ageArray[4] = 14;
nameArray[0] = "aaa";
nameArray[1] = "bbb";
nameArray[2] = "ccc";
- 1.5从数组中读取数据
System.out.println("ageArray[0] = " + ageArray[0]);
System.out.println("ageArray[1] = " + ageArray[1]);
System.out.println("ageArray[2] = " + ageArray[2]);
System.out.println("ageArray[3] = " + ageArray[3]);
System.out.println("ageArray[4] = " + ageArray[4]);
System.out.println("nameArray[0] = " + nameArray[0]);
System.out.println("nameArray[1] = " + nameArray[1]);
System.out.println("nameArray[2] = " + nameArray[2]);
- 1.6遍历数组
// 6.遍历数组(通过循环依次读取数组中的每一个值)
// 遍历数组的起点:数组下标0
// 遍历数组的终点:数组长度-1
for (int i = 0; i < ageArray.length; i++) {
// 在遍历过程中,使用i作为数组下标访问每一个数组元素
int age = ageArray[i];
System.out.println("age = " + age);
}
PS:生成遍历数组的for循环模板的快捷键是数组变量名.fori
- 数组必须创建对象再访问元素
- 数组中元素默认值
系统创建数组对象后,必须分配和数组长度匹配的空间,此时每一个数组元素都会被系统分配默认值。
2、内存分析
- 2.1声明基本数据类型变量
int a = 10;
- 2.2创建对象
Scanner scanner = new Scanner(System.in);
- 2.3创建数组对象
- 2.4将数据写入数组
ageArray[1] = 5;
- 2.5多声明一个数组变量
int[] otherArray = ageArray;
- 2.6通过另一个变量访问数组元素
- 2.7数组变量指向新数组对象
otherArray = new int[2];
- 2.8给新数组元素赋值
otherArray[1] = 33;
3、多维数组
- 3.1概念[逻辑角度]
一维数组
一维数组是线性的结构,通俗来说就是一条线
二维数组
二维数组通俗来说就是一个面
三维数组
三维数组就是一个立体的空间结构了
多维数组的底层内存存储结构
- 3.2语法层面
** 创建二维数组格式一**
// 格式1:动态初始化——创建数组对象时就指定了两个维度的数组长度
int[][] arr2d01 = new int[3][2];
arr2d01[0][0] = 100;
arr2d01[0][1] = 101;
arr2d01[1][0] = 102;
arr2d01[1][1] = 103;
arr2d01[2][0] = 104;
arr2d01[2][1] = 105;
创建二维数组格式二
// 格式2:动态初始化——仅指定第一个维度的数组长度
int[][] arr2d02 = new int[3][];
// Java中多维数组不必都是规则矩阵形式
arr2d02[0] = new int[]{3, 5, 7};
arr2d02[1] = new int[]{14, 21, 66, 89};
arr2d02[2] = new int[]{90, 100};
创建二维数组格式三
// 格式3:静态初始化——在创建对象时将数据填充
// 此时如果某个元素位置设置为null不会编译报错,但是访问这个位置时还是要先初始化
int[][] arr2d03 = new int[][]{{1,2,3}, {4,5}, null, {6,7,8}};
// 前面设置null的地方,需要初始化才可以访问
arr2d03[2] = new int[]{12,24};
arr2d03[2][0] = 5;
[4]创建二维数组格式四[不建议]
// 格式4:声明变量时,两层[]没在一起
int[] x[] = new int[][]{{1,2,3}, {4,5}, {6,7,8}};
- 3.3访问二维数组元素
// 二、访问二维数组元素(读、写)
int[][] arr2d05 = new int[2][2];
// 向数组元素写入数据
arr2d05[1][0] = 10;
// 读取数组元素
System.out.println("arr2d05[1][0] = " + arr2d05[1][0]);
- 3.4遍历二维数组
// 三、遍历二维数组:需要使用双层嵌套的循环
int[][] arr2d06 = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
// 先遍历第一个维度:取出每一个一维数组
for (int i = 0; i < arr2d06.length; i++) {
int[] intArr = arr2d06[i];
for (int j = 0; j < intArr.length; j++) {
int intValue = intArr[j];
System.out.println("intValue["+i+"]["+j+"] = " + intValue);
}
}
- ⑥杨辉三角练习
// 1.创建二维数组,第一维长度为10
int[][] yanghuiArr = new int[10][];
// 2.通过双层for循环给二维数组填充数据
for (int i = 0; i < yanghuiArr.length; i++) {
// 3.创建一维数组,对yanghuiArr下标i位置进行初始化
yanghuiArr[i] = new int[ i + 1 ];
// 4.遍历一维数组,填充数据
for (int j = 0; j <= i; j++) {
// 5.一头(一维数组的下标0元素)一尾(一维数组的下标长度-1元素)固定就是1
// 一维数组中最后一个元素的下标正好就是现在外层循环变量:i
if (j == 0 || j == i) {
yanghuiArr[i][j] = 1;
} else {
// 6.非头尾的元素,由上一行中两个元素相加得到
// 第一个值的下标:[i-1][j-1]
// 第二个值的下标:[i-1][j]
yanghuiArr[i][j] = yanghuiArr[i-1][j-1] + yanghuiArr[i-1][j];
}
}
}
// 7.遍历填充数据的二维数组
for (int i = 0; i < yanghuiArr.length; i++) {
int[] yanghuiValueArr = yanghuiArr[i];
for (int j = 0; j < yanghuiValueArr.length; j++) {
System.out.print(yanghuiValueArr[j] + "\t");
}
System.out.println();
}
// 一维数组中最后一个元素的下标正好就是现在外层循环变量:i
if (j == 0 || j == i) {
yanghuiArr[i][j] = 1;
} else {
// 6.非头尾的元素,由上一行中两个元素相加得到
// 第一个值的下标:[i-1][j-1]
// 第二个值的下标:[i-1][j]
yanghuiArr[i][j] = yanghuiArr[i-1][j-1] + yanghuiArr[i-1][j];
}
}
}
// 7.遍历填充数据的二维数组
for (int i = 0; i < yanghuiArr.length; i++) {
int[] yanghuiValueArr = yanghuiArr[i];
for (int j = 0; j < yanghuiValueArr.length; j++) {
System.out.print(yanghuiValueArr[j] + "\t");
}
System.out.println();
}