二维数组及其内存图解

news2024/10/7 4:29:02

二维数组

        在一维数组的介绍当中曾说,数组中可以储存任何同类型的元素,那么这个元素是不是可以也是数组呢?答案是可以,即在数组之中储存数组元素。这种情况就是多维数组,当一个数组中的元素是数组时叫做二维数组,当这个数组中的数组元素的元素仍然是数组时叫做三位数组,依次类推可以得到n维数组。不过通常的使用中一般只用到二位数组。

        二维数组的定义与一位数组的定义相似,可以通过语句:

        1、数据类型 [ ] [ ] 数组名称 = new [一维数组的长度] [ ]; 

        2、数据类型  数组名称 [ ] [ ] = new [一维数组的长度] [ ];

        3、数据类型  [ ] [ ] = new 数据类型 [ ] [ ]{数组1,数组2,数组3,……};

        4、数据类型 [ ] [ ] ={ 数组1,数组2,数组3,……};

四个语句来定义,同样在这四个数组中,第2个语句是第一个语句的变体,第3个语句和第4个语句当中需要注意输入的是数组元素即可,并且这里要注意的是,在第1个语句和第2个语句中“一维数组的长度”是必不可少的,但是第二个[ ]中是不能添加长度的。

        对于二位数组的访问,可以访问其中的某一个数组,也可访问到具体单个元素,比如在二维数组中arr[0]表示的是一个数组,当进行输出打印时,结果是一个一维数组,而arr[0][0]表示的是在二维数组中的第一行的第一个元素。掌握了这个访问规则,就可以对二维数组中的元素进行遍历,可以直接进行遍历,也可以采用嵌套循环来遍历。比如下面的这个程序所示:

package cn.luoyusanshu.array;
import java.util.Arrays;
public class Test05 {
    public static void main(String[] args) {
        //第1个语句创建二维数组
        int[][] arr01 = new int[3][];
        arr01[0] =new int[] {1,5,6};
        arr01[1] = new int[] {1,5,8,7};
        arr01[2] = new int[] {4,9,66};

        //第2个语句创建二位数组
        int arr02[][]=new int[3][];
        arr02[0] = new int[]{1,6,8,9};
        arr02[1] = new int[]{8,69,8,9};
        arr02[2] = new int[]{5,6,8,79};

        //第3个语句创建二维数组
        int[][] arr03 = new int[][]{{1,2,9},arr02[1],arr02[2]};

        //第4个语句创建二维数组
        int[][] arr04 = {{0,2,5},{3,6,9,6},{4,8,11,22}};

        //访问二维数组中的元素
        System.out.println("二维数组arr0的第一个数组元素为:"+Arrays.toString(arr01[0]));
        System.out.println("二维数组arr01的第一个元素为:"+arr01[0][0]);
        System.out.println("二维数组arr01的长度为:"+arr01.length);
        System.out.println("二维数组arr01的第一个数组元素的长度为:"+arr01[0].length);

    }


}

数组的内存图解

        在java中将内存分为栈、堆、方法区三大块,其中方法区用来储存可运行的class文件,包括方法、静态成员、常量等;栈是方法运行时的内存,也就说在运行方法时才会调用此处内存,在栈中开辟空间时是连续开辟的,和电影胶带有些相似,因此运行时开辟的空间叫这个方法在栈中对应的栈帧。栈的特点是“先进后出”,比如main方法是最先开辟栈帧的方法,但是它却是最后一个退出栈空间的方法。推内存够用于储存对象以及数组。数组在推内存中被储存时用来接收数组的变量(如arr)接收的是数组所在内存的地址值,而不是数组中元素的实际值,因此数组是引类型,如果要对一个数组进行初始化,要用null关键字进行赋值。

        接下来用一个程序来分析二维数组在内存中的储存进行分析,用以加深对数组也是对象的理解。

package cn.luoyusanshu.array;

public class Test08 {
    public static void main(String[] args) {
       int[][] arr = new int[3][];
       arr[0]=new int[2];
       arr[1]=new int[3];
       arr[2]=new int[2];
    }
}

        在这个程序的内存分析中只用到了 栈内存和堆内存两块,程序开始时,从main方法开始运行,创建数组之前先在main方法的栈帧中创建了一个变量,由于未进行赋值,它的值为默认值,因为创建的是数组,所以它的默认值为null。随后遇到关键字new,于是想堆内存申请开辟空间,假设这个空间的地址为0x0011,这时会按照创建的数组大小在推内存中开辟相应的空间,并将空间的地址传给arr变量。但由于创建数组时并未进行赋值操作,为默认初始化,所以数组元素的值为默认值,又因为二维数组中的元素为数组类型,因此此时的默认值为null。

        接下来对数组中的元素进行赋值操作,在下面的三行代码都采用了new关键字,因此会向推内存申请开辟三个空间,与这三个空间对应的地址分别为 0x0021、0x0031、0x0022。由于创建的为int类型的数组对象,并且未进行赋值操作,因此元素的值为默认值0。同时开辟的这三个空间的地址会返回给对应的一位数组对应的元素,如下图所示。

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1579126.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

公网环境下如何端口映射?

公网端口映射是一种网络技术,它允许将本地网络中的设备暴露在公共互联网上,以便能够从任何地方访问这些设备。通过公网端口映射,用户可以通过互联网直接访问和控制局域网中的设备,而无需在本地网络中进行复杂的配置。 公网端口映射…

自动驾驶---Motion Planning之STSC轨迹优化

1 背景 在之前的博客《自动驾驶---Motion Planning之构建SLT Driving Corridor》中,为读者讲解了SLT图构建的思路---通过构建Driving Corridor的方式确定SL两个方向的boundary。但是并没有去详细讲解如何去构造优化问题,以及如何去生成最终的轨迹,所以本篇博客将继续为读者讲…

如果用大模型考公,kimi、通义千问谁能考高分?

都说大模型要超越人类了,今天就试试让kimi和通义千问做公务员考试题目,谁能考高分? 测评结果再次让人震惊! 问题提干:大小两种规格的盒装鸡蛋,大盒装23个,小盒装16个,采购员小王买了…

libVLC 音频立体声模式切换

在libVLC中,可以使用libvlc_audio_set_channel函数来设置音频的立体声模式。这个函数允许选择不同的音频通道,例如立体声、左声道、右声道、环绕声等。 /*** Set current audio channel.** \param p_mi media player* \param channel the audio channel…

【webrtc】源码下载与编译

目录 下载 下依赖 参考文章 : 下载 (1) windows ,centos上都会报错 (2) ubuntu A : 在git上设置代理 B fetch通过 ubuntu的界面 proxy设置了代理 这将会拉取webRTC源码,且额外加了android相关的依赖,例如And…

MySQL·库的操作

目录 数据库的增加 字符集和校验规则 显示的指明字符集和校验规则 校验规则对数据库的影响 数据库的删除 数据库的查看 显示创建语句 数据库的修改 数据库的备份与恢复 备份 恢复 注意事项 查看连接情况 数据库的增加 CREATE DATABASE [IF NOT EXISTS] db_name [cr…

【神经网络】卷积神经网络CNN

卷积神经网络 欢迎访问Blog全部目录! 文章目录 卷积神经网络1. 神经网络概览2.CNN(Convolutional Neunal Network)2.1.学习链接2.2.CNN结构2.2.1.基本结构2.2.1.1输入层2.2.1.2.卷积层|Convolution Layers2.2.1.3.池化层|Pooling layers2.3…

【Entity Framework】EF连接字符串和模型

【Entity Framework】EF连接字符串和模型 文章目录 【Entity Framework】EF连接字符串和模型一、概述二、使用 Code First 按约定创建连接三、使用 Code First 和指定的数据库名称按约定创建连接四、将 Code First 与 app.config/web.config 文件中的连接字符串结合使用五、将 …

软件设计师——数据库

数据库 三级模式两级映像关系模型基本术语关系模型中的关系完整性约束 三级模式两级映像 概念模式(也称模式)对应基本表 外模式(也称用户模式或子模式)对应视图 内模式(也称存储模式)对应存储文件 两级映像…

下载python电子书

下面展示一些 内联代码片。 import requests from lxml import etree from urllib import parse from pprint import pprint from tqdm import tqdm class PythonBook: def init(self): self.url“https://m.jb51.net/books/list476_1.html” self.url_page“https://m.jb51.n…

编译Nginx配置QUIC/HTTP3.0

1. 安装BoringSSL sudo apt update sudo apt install -y build-essential ca-certificates zlib1g-dev libpcre3 \ libpcre3-dev tar unzip libssl-dev wget curl git cmake ninja-build mercurial \ libunwind-dev pkg-configgit clone --depth1 https://github.com/google/b…

el-cascader的懒加载模式怎么设置默认值

点击修改会跳出一个dialog&#xff0c;dialog需要显示信息&#xff0c;其中地址使用el-cascader标签并使用懒加载实现&#xff0c;地址数据都是从后台获取&#xff0c;如果直接使用v-model绑定默认值&#xff0c;会不显示。 解决方法1&#xff1a; <el-cascader class&quo…

Docker之数据卷和Dockerfile

目录 一、Docker数据管理 二、数据卷 创建数据卷 查看数据卷 删除数据卷 挂载数据卷 三、数据卷容器 创建数据卷容器 测试数据卷容器 备份数据卷容器 还原数据卷容器 四、Dockerfile 什么是Dockerfile 基本结构 常用指令 快速入门 编写Dockerfile文件 构建镜…

OneFlow深度学习框架:技术优势与功能特点

文章目录 一、概要二、核心技术优势2.1、分布式训练2.2、极致性能2.3、端到端的智能数据平台2.4、开放灵活的算法支持2.5、跨平台支持 三、功能特点四、OneFlow与TensorFlow对比四、安装OneFlow五、总结 一、概要 OneFlow是一款基于Python的开源深度学习框架&#xff0c;旨在实…

无人机概述

1、中英文对照表 中文中文简称英文全称英文简称无人驾驶飞机无人机Unmanned Aerial VehicleUAV无人机自组织网络无人机网络flying Ad-Hoc networkFANET 2、相关概念 2.1鲁棒性 网络鲁棒性是指网络系统在面对随机故障、蓄意攻击或其他异常情况时&#xff0c;能够保持其基本功…

麒麟系统下安装qt5.9.1后不能输入中文

引言 在虚拟机上安装麒麟系统后,安装了qt5.9.1,只能输入英文和数字不能输入中文注释,编译的程序也不能输入中文。 原因 安装后的麒麟系统自带搜狗输入法,原本可以输入中文,但是qt5.9.1缺少支持搜狗输入法的fcitx插件。所以qt5.9.1中不能输入中文。 解决方法 安装fcit…

Docker速成:新手变专家!

Docker介绍 容器历史 1、Chroot Jail 就是常见的chroot命令的用法。它在1979年的时候就出现了&#xff0c;被认为是最早的容器化技术之一。它可以把一个进程的文件系统隔离起来。 2、The FreeBSD Jail &#xff08;监狱&#xff09;实现了操作系统级别的虚拟化&#xff0c;他…

ShowDoc<2.8.3 前台文件上传

直接对着接口index.php?s/home/page/uploadimg构造上传请求就行了&#xff0c;上传表单的name属性为editormd-image-file&#xff0c;文件名要在php前面加一对<>符号。 数据包&#xff1a; POST /index.php?s/home/page/uploadImg HTTP/1.1

01-Git 快速入门

单枪匹马的工作流 团队协作的工作流 其中, pull request 与 pull 区别很大 pull request : 请求远程仓库拉取本人的 commt pull : 将远程仓库同步更新到本地 安装好Git以后, 先检查是否已经绑定了用户名和邮箱 git config --list再检查C:\Users\xxx.ssh 下是否存在 id_rsa.…

什么是人工智能?人工智能、机器学习、深度学习三者之间有什么关系吗?

深度学习是机器学习的一个分支。深度学习是机器学习的一部分&#xff0c;与机器学习的其他分支学科&#xff0c;以及统计学、人工智能等学科都有着紧密的联系。深度学习、机器学习、人工智能、统计学之间的关系如图1-4所示。 图1-4 深度学习、机器学习、人工智能、统计学之间的…