数据结构和算法 —— 二维数组 的简单介绍及实例应用

什么是二维数组

二维数组是多维数组的一种,还有三维数组,四位数组。。。当然,我们不需要学习得那么复杂,学到二维数组就已经够我们的平常使用了。
那什么是二维数组呢?

一维数组

为了认识二维数组,为了方便理解,我们可以先从平常我们用的最多的一维数组来谈起:

简介

  • 相同类型的若干个数据,按照一定先后次序排列组合而成
  • 其中,每一个数据称作一个数组元素
  • 每个数组元素可以通过一个下标来访问它们

特点

  • 数组一旦被创建,它的长度就是不可以改变的
  • 数组中的元素必须是相同类型,不允许出现混合类型
  • 数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型

二维数组

通过对一维数组的了解,相似地,二维数组就比较好理解了:

概念

二维数组其实我们也可以看做是一个一维数组,只不过一维数组中存放的数据类型是所有的数据类型,而二维数组中存放的数据类型是数组,本质上是以数组作为数组元素的数组

初始化

分为静态初始化和动态初始化

  • 静态初始化
    int[][] arrMultiStatic = {{1},{1,2},{1,2,3}};
  • 动态初始化
    int[][] arrMultiDynamic1 = new int[3][];
    int[][] arrMultiDynamic2 = new int[3][4];

很明显,在二维数组的声明中,有两个[],其中:

  • 第一个[]代表二维数组中存放的数组的个数,也就是该二维数组的长度;
  • 第二个[]代表二维数组中存放的每个数组的长度。
    需要注意的是,如果我们第二个[]并没有对其赋值,程序运行,会抛出java.lang.NullPointerException

下边程序是针对上面两种声明的解释

  1. 首先我们来看第二个[]没有被赋值的情况
    int[][] arrMultiDynamic1 = new int[3][];
    System.out.println(arrMultiDynamic1[0][0]);//因为没有给第二个[]赋值,默认值是null,访问时会报空指针异常
    //为了验证我们可以打印出这个二维数组中的数组元素来看看
            for (int[] rows : arrMultiDynamic1){
            System.out.println(Arrays.toString(rows));//输出结果确实是:null null null,所以,此时对其操作必然会报空指针
        }
    //那为什么输出的结果是3个null值呢?很简单,因为这个二维数组定义的第一个【】4数是3,也就是说:这个二维数组中存放有三个数组元素,并且第二个而里面的三个数组元素默认值都是null,So,you know...
  1. 然后我们再来看第二个[]被赋值的情况
    int[][] arrMultiDynamic1 = new int[3][4];
    System.out.println(arrMultiDynamic1[0][0]);//第二个[]被赋值,会有默认值,此时输出结果为:0

二维数组有什么用

那说到底我们到底为什么要用二维数组呢?

我们可以先看一个实际的案例

需求:如下图,编写一个五子棋程序,有存盘退出和续上盘的功能。
在这里插入图片描述

思考

如图,我们怎么来实现这个功能呢?这个时候就要用到二维数组了。
比如,我们可以创建一个11 * 11的二维数组,其中0表示没有棋子,1表示黑子,2表示蓝子。。。当然是没有问题的。
但是如上图,我们发现,如果我们使用该二维数组,那么里面有很多值默认值是0,因此记录了很多没有意义的数据,所以我们便引入了 —— 稀疏数组

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页