当前位置: 首页 > news >正文

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

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛

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

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

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

前言

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

摘要

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

Java多维数组

简介

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

源代码解析

多维数组的定义

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

type [][] arrayRefVar;   // 声明多维数组
type arrayRefVar[][];   // 声明多维数组

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

代码分析:

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

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

多维数组的初始化

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

动态初始化

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

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

代码分析:

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

  • array[0][0]代表第一个元素,它位于第一行第一列
  • array[1][2]代表第七个元素,它位于第二行第三列
  • array[2][3]代表第十二个元素,它位于第三行第四列

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

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();
}

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

静态初始化

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

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

代码分析:

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

  • array[0][0] = 1
  • array[0][1] = 2
  • array[0][2] = 3
  • array[1][0] = 4
  • array[1][1] = 5
  • array[1][2] = 6

多维数组的访问

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

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

代码分析:

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

多维数组的遍历

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

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循环实现。

类代码方法介绍

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

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 方法换行,从而保证输出结果按照二维数组的形式展现。

测试用例

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

测试代码演示

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 !!!


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

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

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

相关文章:

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

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…...

C语言运算类型有哪些

C语言中的运算类型主要分为以下几类&#xff1a; 1. 算术运算符&#xff1a; - 加法运算符 - 减法运算符 - - 乘法运算符 * - 除法运算符 / - 取模运算符 %&#xff08;取余数&#xff09; 2. 关系运算符&#xff1a; - 大于 > - 小于 < - 大…...

【深度学习】Loss为Nan的可能原因

文章目录 1. 问题情境2. 原因分析3. 导致Loss为Nan的其他可能原因 1. 问题情境 在某个网络架构下&#xff0c;我为某个数据项引入了一个损失函数。 这个数据项是nn.Embedding类型的&#xff0c;我加入的损失函数是对nn.Embedding空间做约束。 因为我在没加入优化loss前&#x…...

解密!考研数学满分学霸的备考书单

这题我太会了&#xff0c;高数视频有是有真的又臭又长&#xff0c;我也不喜欢看 但是自己看教材&#xff0c;有的地方又比较难以理解&#xff0c;所以&#xff0c;这个时候一本通俗易懂的教材就显得格外重要&#xff0c;国内很多教材都讲的晦涩难懂&#xff0c;所以我给大家推…...

AI绘画工具介绍

AI绘画工具是利用人工智能技术帮助用户创作艺术作品的软件或平台。它们通常通过用户输入的描述性文字&#xff0c;自动解析并生成具有特定风格和主题的画作。以下是一些2024年流行的AI绘画工具的介绍&#xff1a; GitMind AI绘画2&#xff1a;一个提供多种语言界面的AI绘画生成…...

【APP逆向】央视频播放量增加,逆向全过程解密

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...

三星系统因何而成?或许是因为吞噬了第四颗恒星

相比于其他的类似星体&#xff0c;这个特殊的三星系统拥有更大更紧密的星体。 三星 天文学家发现了前所未见的三星系统。相比于其他典型的三星系统&#xff0c;这一三星系统拥有更大的体积&#xff0c;并且排列也更加紧密&#xff0c;这也使得这一系统更加特别。科学家推测&am…...

【MySQL】(基础篇六) —— 过滤数据

过滤数据 本文将讲授如何使用SELECT语句的WHERE子句指定搜索条件。 WHERE子句 数据库表一般包含大量的数据&#xff0c;很少需要检索表中所有行。通常只会根据特定操作或需要提取表数据的子集。只检索所需数据需要指定搜索条件&#xff08;search criteria&#xff09;&…...

利用 HTML5 Canvas 实现在线签字功能

目录 前言 一、HTML5 Canvas 简介 二、签字功能的实现 效果演示 完整代码 前言 在现代互联网应用中&#xff0c;有时我们需要让用户在网页上进行签字操作&#xff0c;比如确认文件、填写电子表格或者签署合同。利用 HTML5 的 canvas 画布&#xff0c;我们可以轻松地实现这一…...

GaussDB技术解读——GaussDB架构介绍(二)

上篇图文&#xff0c;从GaussDB关键架构目标、GaussDB分布式架构、数据计算路由层&#xff08;Coordinator&#xff09;关键技术方案等三方面对GaussDB架构进行了介绍。本篇将从数据持久化存取层(DataNode)关键技术方案、全局事务管理层&#xff08;GTM&#xff09;关键技术方案…...

EfficientNet详解

原论文名称&#xff1a;EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks 论文下载地址&#xff1a;https://arxiv.org/abs/1905.11946 原论文提供代码&#xff1a;https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet 自己…...

UI前端交互的艺术:探索设计的四个维度、五个层面、六个要点与七大原则

UI前端交互的艺术&#xff1a;探索设计的四个维度、五个层面、六个要点与七大原则 在数字时代的浪潮中&#xff0c;UI前端交互设计如同一门深邃的艺术&#xff0c;既需要技术支撑&#xff0c;又需要设计灵感。它关乎用户体验&#xff0c;影响着产品的成败。那么&#xff0c;UI…...

java接口设计需要考虑哪些方面

1.签名 目的&#xff1a;防止数据被篡改 &#xff08;1&#xff09;接口请求方将请求参数、时间戳和密钥拼接成一个字符串。 &#xff08;2&#xff09;使用MD5等hash算法生成签名。 &#xff08;3&#xff09;在请求参数或请求头中增加sign参数传递给API接口。 &#xff08;4&…...

Opencv图像处理

Opencv图像处理 图像阈值处理 图像阈值的处理通过cv2.threshold函数来进行处理&#xff0c;该函数的具体说明如下所示 ret, dst cv2.threshold(src, thresh, maxval, type) src&#xff1a; 输入图&#xff0c;只能输入单通道图像&#xff0c;通常来说为灰度图 dst&#x…...

LeetCode | 2879.显示前三行

在 pandas 中&#xff0c;可以使用 head() 方法来读取 DataFrame 的前几行数据。如果想读取指定数量的行&#xff0c;可以在 head() 方法中传入一个参数 n&#xff0c;读取前 n 行 import pandas as pddef selectFirstRows(employees: pd.DataFrame) -> pd.DataFrame:retur…...

Qt实现简易播放器

效果如图 源码地址&#xff1a; 简易播放器: 基于Qt的简易播放器&#xff0c;底层采用VLC源码 - Gitee.com GitHub:GitHub - a-mo-xi-wei/easy-player: 基于Qt的调用VLC的API的简易播放器...

适配Android12启动页

今天我们讲个什么话题呢&#xff1f;我们今天讲的内容是&#xff0c;Android12新启动页的支持API。 启动页我想大家都不陌生吧&#xff0c;通常的写法就是先创建一个SplashActivity&#xff0c;在onCreate中 Handler(Looper.getMainLooper()).postDelayed({// 在这里跳转主界…...

人工智能在医学领域的应用及技术实现

欢迎来到 Papicatch的博客 目录 &#x1f349;引言 &#x1f349; 医学影像分析 &#x1f348;技术实现 &#x1f34d;数据准备 &#x1f34d;模型构建 &#x1f34d;模型训练 &#x1f34d;模型评估 &#x1f34d;应用部署 &#x1f348;示例代码 &#x1f349; 基因…...

MySQL—多表查询—练习(1)

一、引言 上几篇关于多表查询的基本几个部分全部学习完了。 多表查询的基本类型的查询包括以下&#xff1a; 1、内连接&#xff08;隐式内连接、显示内连接&#xff09;&#xff1a;... [INNER] JOIN ... ON 条件; &#xff09; 2、外连接&#xff08;左外连接、右外连接&…...

千益畅行:合法合规的旅游卡服务,打破误解

近期&#xff0c;千益畅行旅游卡服务引起了公众的广泛关注。然而&#xff0c;一些人对该服务存在误解&#xff0c;认为其存在某种欺诈行为。但经过深入了解和全网搜索证据&#xff0c;我们可以确认&#xff0c;千益畅行实际上是一家合法合规的旅游卡服务提供商。 千益畅行旅游…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...