[JavaSE] 二维数组详解【静态初始化和动态初始化区别】—Day13
✅作者:Vengo€bs
🔥系列专栏:JavaSE
💖如果文章有错误,时刻欢迎大家的指正。当然觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝
💬格言:希望我们都能朝着光走🐱🏍
目录
✏️ 概念
✏️ 作用
✏️ 数组的声明
✏️ 数组的初始化
1.静态初始化
静态初始化1
静态初始化2(先声明,再初始化)
静态初始化3(简化静态初始化1)
2.动态初始化
✏️ 数组的使用
1.设置指定下标上的元素
2.获取指定下标上的元素
3.获取长度
4.数组的遍历
概念
什么是二维数组呢?
二维数组本质上是以数组作为数组元素
的数组,即数组的数组。
- 二维数组就是一个有行和列的矩阵,每一行代表一个数组,即数组的数组;
- 每一行数组内元素所在的位置可以用行和列号来表示;
作用
可以保存更大批量同类型的数据
数组的声明
数据类型[][] 数组名;
注意: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个元素//动态初始化2String[][] 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);//2System.out.println("获取二维数组中第一个一维数组元素的个数:" + names[0].length);//3System.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("---------------"); //遍历数组 -- foreachfor (String[] ss : names) { for (String element : ss) { System.out.println(element); }}