✅作者:Vengo€bs
🔥系列专栏:JavaSE
💖如果文章有错误,时刻欢迎大家的指正。当然觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝
💬格言:希望我们都能朝着光走🐱🏍
目录
✏️ 概念
✏️ 作用
✏️ 数组的声明
✏️ 数组的初始化
✏️ 数组的使用
概念
什么是二维数组呢?
二维数组本质上是以数组作为数组元素
的数组,即数组的数组。
- 二维数组就是一个有行和列的矩阵,每一行代表一个数组,即数组的数组;
- 每一行数组内元素所在的位置可以用行和列号来表示;
作用
可以保存更大批量同类型的数据
数组的声明
数据类型[][] 数组名;
注意:1、二维数组是引用数据类型
2、元素:数组中的数据
3、下标/索引:每个元素的编号
4、下标从0开始
5、数组初始化后长度不可改变
6、数组分配空间是连续的
二维数组内的两个一维数组不一定连续,但是数组内的元素一定连续
数组的初始化
1.静态初始化
由程序员指定数据,长度由系统自动分配
静态初始化1
String[][] names = new String[][]{{"麻生希","椎名空","水菜丽"},{"樱井步","濑亚美莉","小峰由衣","泷泽萝拉"}};
静态初始化2(先声明,再初始化)
String[][] names;
names = new String[][]{{"麻生希","椎名空","水菜丽"},{"樱井步","濑亚美莉","小峰由衣","泷泽萝拉"}};
静态初始化3(简化静态初始化1)
String[][] names = {{"麻生希","椎名空","水菜丽"},{"樱井步","濑亚美莉","小峰由衣","泷泽萝拉"}};
例子:
public class Test01 {
public static void main(String[] args) {
String[][] names ={{"黄子韬","张艺兴","鹿晗"},{"王俊凯","任嘉伦","胡歌","刘亦菲"}};
//设置下标元素
names[1][1]="李易峰";
//获取指定下标上的元素
String n = names[1][1];
System.out.println("获取指定下标上的元素:"+n);
//设置
}
}
此时,二维数组静态初始化内存图为:
2.动态初始化
由程序员指定长度,数据由系统自动分配
动态初始化系统会赋默认值
例子
public static void main(String[] args) {
int[][] names =new int[2][3];
float[][] names1 =new float[2][3];
boolean[][] names2 =new boolean[2][3];
String[][] names3 =new String[2][3];
//获取指定小标上的元素
System.out.println(names[1][1]);
System.out.println(names1[1][1]);
System.out.println(names2[1][1]);
System.out.println(names3[1][1]);
}
运行结果:
默认值类型:
整数类型:0
浮点类型:0.0
字符类型:' '
布尔类型:false
引用类型:null - 空
//动态初始化1
//String[][] names = new String[2][3];//声明2个一维数组,每个一维数组有3个元素
//动态初始化2
String[][] names;
names = new String[2][3];//声明2个一维数组,每个一维数组有3个元素
例子1:
public class Test01 {
public static void main(String[] args) {
String[][] names =new String[2][3];
//设置指定下标的元素
names[0][0] = "小白1";
names[0][1] = "小白2";
names[0][2] = "小白3";
names[1][0] = "小白4";
names[1][1] = "小白5";
names[1][2] = "小白6";
//获取指定小标上的元素
String n = names[1][1];
System.out.println(n);
}
}
此时,二维数组动态初始化内存图为:
例子2
public class Test02 {
public static void main(String[] args) {
String names[][] = new String[2][];
String[] ns1={"黄子韬","张艺兴","鹿晗"};
names[0]=ns1;
String[] ns2={"王俊凯","任嘉伦","胡歌","刘亦菲"};
names[1]=ns2;
for (String[] ss : names) {
for (String element : ss) {
System.out.println(element);
}
}
}
}
此时,内存图结构为:
静态初始化 vs 动态初始化
* 一开始就知道存储的数据,使用静态初始化
* 一开始只知道长度,使用动态初始化
数组的使用
1.设置指定下标上的元素
names[1][1] = "小白";
2.获取指定下标上的元素
String n = names[1][1];
System.out.println("获取指定下标上的元素:" + n);//小白
3.获取长度
System.out.println("获取二维数组中一维数组的个数:" + names.length);//2
System.out.println("获取二维数组中第一个一维数组元素的个数:" + names[0].length);//3
System.out.println("获取二维数组中第二个一维数组元素的个数:" + names[1].length);//4
4.数组的遍历
遍历的思路:先取出二维数组中的一维数组,再遍历一维数组中的元素
//遍历数组 -- for循环
for (int i = 0; i < names.length; i++) {
for (int j = 0; j < names[i].length; j++) {
System.out.println(names[i][j]);
}
}
System.out.println("---------------");
//遍历数组 -- foreach
for (String[] ss : names) {
for (String element : ss) {
System.out.println(element);
}
}