快速学习Java的多维数组技巧

哈喽,各位小伙伴们,你们好呀,我是喵手。

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

  Java作为一门广泛应用于各行各业的开发语言,具有丰富的数据类型支持,其中多维数组是其重要的一种。多维数组可以更加方便地组织数据,提高Java应用程序的效率。本文将为大家介绍Java中多维数组的基本概念和常用操作,助力读者更好地掌握多维数组的使用技巧。

摘要

  本文主要介绍Java中多维数组的概念、定义、初始化、访问、遍历等操作,通过实例展示多维数组在Java中的应用场景,以及其优缺点分析。

Java多维数组

简介

  Java中的多维数组是指具有多个维度的数组,也就是数组中的每一个元素本身是一个数组。Java中可以定义二维数组、三维数组或者更高维度的数组。多维数组可以更直观地把数据组织成表格状或者立体状的数据结构,方便进行数据的操作和管理。

源代码解析

多维数组的定义

  Java中多维数组的定义如下:

java 复制代码
type [][] arrayRefVar;   // 声明多维数组
type arrayRefVar[][];   // 声明多维数组

  其中type表示数据类型,arrayRefVar表示数组名,这里定义了一个二维数组。

代码分析:

  这两行代码都是声明一个二维数组,其中 type 表示数组元素的数据类型。不同之处在于第一行的 arrayRefVar 是一个数组变量的名称,第二行的 arrayRefVar 是一个数组的类型名。

  通常情况下,第一种声明方式更常用,因为它更能直观地体现出数组变量的含义。同时,第二种声明方式需要在其他地方再定义数组变量,才能使用这个数组类型名。

多维数组的初始化

  Java中多维数组的初始化有两种方式:

动态初始化

  动态初始化可以指定每个维度的长度,例如:

java 复制代码
int[][] array = new int[3][4];  // 定义一个3行4列的二维数组

代码分析:

  此代码定义了一个名为array的二维数组,它有3行和4列。它可以存储int类型的数据。这意味着它有3个一维数组,每个一维数组中有4个元素。可以使用以下方式来访问二维数组的元素:

  • array00代表第一个元素,它位于第一行第一列
  • array12代表第七个元素,它位于第二行第三列
  • array23代表第十二个元素,它位于第三行第四列

  可以通过使用循环来遍历整个数组,例如:

java 复制代码
for(int i=0; i<array.length; i++) {
    for(int j=0; j<array[i].length; j++) {
        System.out.print(array[i][j] + " ");
    }
    System.out.println();
}

这将打印出整个数组的内容。

静态初始化

  静态初始化需要指定数组中每个元素的值,例如:

java 复制代码
int[][] array = {{1,2,3},{4,5,6}};  // 定义一个二维数组并初始化

代码分析:

  这段代码定义了一个名为array的二维数组,其包含两个一维数组,每个一维数组有三个元素。初始化的值为1、2、3、4、5、6。可以通过以下方式访问数组中的元素:

  • array00 = 1
  • array01 = 2
  • array02 = 3
  • array10 = 4
  • array11 = 5
  • array12 = 6

多维数组的访问

  Java中多维数组的访问通过用方括号括起来的下标来实现,例如:

java 复制代码
int[][] array = new int[3][4];  // 定义一个3行4列的二维数组
int val = array[1][2];  // 访问第2行第3列的元素

代码分析:

  这段代码定义了一个3行4列的二维数组,即数组名为array,数组元素类型为int,其中第一个方括号\[\]表示数组的行数,第二个方括号\[\]表示数组的列数。然后,访问了该数组的第2行第3列的元素,并将其赋值给变量val。注意,二维数组的行和列都是从0开始计数的,因此array12表示的是第2行第3列的元素。

多维数组的遍历

  Java中多维数组的遍历可以通过嵌套的for循环来实现,例如:

java 复制代码
int[][] array = {{1,2,3},{4,5,6},{7,8,9}};
for(int i=0;i<array.length;i++){  // 外层循环控制行数
   for(int j=0;j<array[i].length;j++){  // 内层循环控制列数
       System.out.print(array[i][j]+" ");
   }
   System.out.println();
}

代码分析:

  这段代码是一个嵌套循环,用于遍历一个二维数组并输出数组中的每一个元素。具体解释如下:

  1. 首先定义一个二维数组 array,并初始化为一个 3x3 的矩阵。

  2. 外层循环 for(int i=0;i<array.length;i++) 控制行数,变量 i 的初始值为 0,每次循环结束时 i 的值增加 1,直到 i 的值大于等于数组 array 的行数为止。

  3. 内层循环 for(int j=0;j<array[i].length;j++) 控制列数,变量 j 的初始值为 0,每次循环结束时 j 的值增加 1,直到 j 的值大于等于当前行数组 array[i] 的列数为止。

  4. 循环体中使用 System.out.print 方法输出数组中的每一个元素,并用空格隔开。注意,这里使用的是 array[i][j] 表示第 i 行、第 j 列位置上的元素。

  5. 每一行输出完毕后,内层循环结束,使用 System.out.println() 方法输出一个空行,换行符表示一行输出结束。

  6. 外层循环继续执行,重复执行步骤 3-5,直到输出完整个二维数组。

应用场景案例

  多维数组在Java中的应用场景比较广泛,例如:

  • 数独游戏:使用9X9的二维数组存储和操作数独游戏中的数字。
  • 地图数据:使用多维数组存储和操作地图数据,例如游戏中的地图数据。
  • 三维坐标系:使用三维数组处理三维坐标系的相关问题。

优缺点分析

  Java中多维数组的优点:

  1. 可以直观地组织数据,方便数据的操作和管理。
  2. 可以更快地访问和操作数据,提高了程序的效率。

  Java中多维数组的缺点:

  1. 多维数组容易造成内存浪费,因为Java中的多维数组是由多个一维数组组成的,每个一维数组都需要占用一定的内存空间。
  2. 多维数组的访问和操作比较复杂,需要嵌套的for循环实现。

类代码方法介绍

  以下是一个二维数组的基本操作示例:

java 复制代码
package com.example.javase.se.array;

/**
 * @Author ms
 * @Date 2023-11-14 21:11
 */
public class ArrayTest4 {

    public static void main(String[] args) {
        // 定义一个3行4列的二维数组
        int[][] array = new int[3][4];
        // 动态初始化二维数组
        array[0][0] = 1;
        array[0][1] = 2;
        array[0][2] = 3;
        array[0][3] = 4;
        array[1][0] = 5;
        array[1][1] = 6;
        array[1][2] = 7;
        array[1][3] = 8;
        array[2][0] = 9;
        array[2][1] = 10;
        array[2][2] = 11;
        array[2][3] = 12;
        // 遍历二维数组
        for(int i=0;i<array.length;i++){
            for(int j=0;j<array[i].length;j++){
                System.out.print(array[i][j]+"\t");
            }
            System.out.println();
        }
    }
}

测试结果

  根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

测试代码分析

  根据如上测试用例,在此我给大家进行深入详细的解读一下测试代码,以便于更多的同学能够理解并加深印象。

  这段代码定义了一个名为 ArrayTest4 的类,其中包含一个主方法 main。在 main 方法中,先定义了一个 3 行 4 列的二维数组 array,并且分别给每个位置赋值。然后使用嵌套循环遍历整个二维数组,并将每个位置的值打印出来。

  具体来说,定义了一个 int 类型的二维数组 array,使用了动态初始化的方式,即在定义数组的同时为数组分配空间,并为数组的每个位置赋值。然后使用两个 for 循环遍历二维数组,外层循环用于遍历行,内层循环用于遍历列。在遍历的过程中,使用 System.out.print 方法打印每个位置的值,并在每行的结尾处使用 System.out.println 方法换行,从而保证输出结果按照二维数组的形式展现。

测试用例

  以下是一个测试用例,测试了二维数组的定义、初始化、访问和遍历操作:

测试代码演示

java 复制代码
package com.example.javase.se.array;

/**
 * @Author ms
 * @Date 2023-11-14 21:11
 */
public class ArrayTest4 {

    public static void main(String[] args) {
        int[][] array = new int[2][3];  // 定义一个2行3列的二维数组
        // 动态初始化二维数组
        array[0][0] = 1;
        array[0][1] = 2;
        array[0][2] = 3;
        array[1][0] = 4;
        array[1][1] = 5;
        array[1][2] = 6;
        // 访问二维数组中的元素
        int val = array[1][2];
        // 遍历二维数组
        for(int i=0;i<array.length;i++){
            for(int j=0;j<array[i].length;j++){
                System.out.print(array[i][j]+"\t");
            }
            System.out.println();
        }
    }
}

测试结果

  根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

测试代码分析

  根据如上测试用例,在此我给大家进行深入详细的解读一下测试代码,以便于更多的同学能够理解并加深印象。

  这段代码定义了一个二维数组 array ,它有 2 行和 3 列,即可以存储 2 * 3 = 6 个元素。

  使用动态初始化,分别对数组中的每个元素进行赋值。

  然后通过访问二维数组中的元素,获取了数组中第 2 行第 3 列的元素赋值给变量 val 。

  最后通过嵌套循环遍历二维数组,将数组中的每个元素输出到控制台上。

全文小结

  本文从多维数组的定义、初始化、访问、遍历等方面进行了详细的讲解,并通过实例展示了多维数组在Java中的应用场景。同时,本文也分析了多维数组的优缺点,帮助读者更好地理解多维数组的使用方法和使用注意事项。

总结

  Java中的多维数组是一种方便数据组织和操作的数据类型,通过本文的介绍,相信读者已经可以掌握多维数组的基本概念和常用操作。同时,读者也需要注意多维数组的缺点,避免造成内存浪费和复杂的访问操作。

... ...

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

... ...

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!


⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

相关推荐
Rust研习社15 小时前
组合真的优于继承吗?为什么 Rust 和 Go 都拥抱组合舍弃继承?
后端·rust·编程语言
IT_陈寒15 小时前
JavaScript的闭包把我坑惨了,说好的内存会自动回收呢?
前端·人工智能·后端
CaffeinePro16 小时前
Pydantic深度使用:数据校验、枚举、ORM映射
后端·fastapi
Chenyiax17 小时前
从 Chat 到 Responses:OpenAI API 抽象为什么变了?
后端
MariaH17 小时前
Koa和Express的区别
后端
MariaH17 小时前
Koa框架的使用
后端
luckdewei18 小时前
那个用 passlib 做认证的新同事,上线第一天就把用户密码写进了日志
后端
ping某19 小时前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
JustHappy19 小时前
我汇总了身边朋友的经历才发现,其实第一份实习是最难找的......
前端·后端·面试
uhakadotcom19 小时前
在python 的 工程化架构中 ,什么是 薄包装器层?
后端·面试·github