【JavaSE】多图解,保姆级详细讲解数组、二维数组--建议收藏

这篇具有很好参考价值的文章主要介绍了【JavaSE】多图解,保姆级详细讲解数组、二维数组--建议收藏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🌱博主简介:是瑶瑶子啦,一名大一计科生,目前在努力学习JavaSE。热爱写博客~正在努力成为一个厉害的开发程序媛!
📜所属专栏:爪洼岛冒险记【从小白到大佬之路】
✈往期博文回顾: 【爪洼岛冒险记】第4站
🕵️‍♂️近期目标:成为千粉小博主。
🙇‍♀️写博客理念:力求用自己的语言加上自己的理解去阐述知识知识、技术。喜欢画图、思维导图去描述过程和知识之间的联系。
🎡您的点赞、关注、收藏、评论,是对我最大的激励和支持!!!
🌺:“再牛的程序员也是从小白开始,既然开始了,就全身心投入去学习技术”

java 二维数组的创建及初始化 画出其引用对象在堆、栈内存中的存储示意图,Java岛冒险记【从小白到大佬之路】,java,开发语言,数据结构,jvm

前言

😻今天,瑶瑶子将带领大家全面学习Java中第一个数据结构—数组,绝对详细,绝对清晰,一遍学会!那么这就启航~

Part1:初识数组(array):

1.1:什么是数组?

  • 🍧数组的概念
    数组是存储相同类型数据的集合
    java 二维数组的创建及初始化 画出其引用对象在堆、栈内存中的存储示意图,Java岛冒险记【从小白到大佬之路】,java,开发语言,数据结构,jvm
  • 🙇‍♀️数组的特点:
    1.元素在内存中位置相邻,为顺序存储.
    2.数组中每一个元素都有对应编号(元素下标)

    java 二维数组的创建及初始化 画出其引用对象在堆、栈内存中的存储示意图,Java岛冒险记【从小白到大佬之路】,java,开发语言,数据结构,jvm
    java 二维数组的创建及初始化 画出其引用对象在堆、栈内存中的存储示意图,Java岛冒险记【从小白到大佬之路】,java,开发语言,数据结构,jvm
    注意:这里为了方便表示,是把内存单元当作4字节来画的,实际上内存的最小单元是1字节.

Part2:Java中的数组

2.1:数组的定义:

2.1.1:定义数组并初始化:

int[] arr = {1,2,3,4,5};//静态初始化
int[] arr = new int[]{1,2,3,4,5};//动态初始化

2.1.2:定义数组,不初始化:

int[] arr = new int[3];
//定义一个数组,元素个数为3,

tips:一维数组只定义,不初始化时,数组内元素值均默认初始化为0

  • 注意:
    • 只定义,不初始化:type+[]表示Java中的一种数据类型,即数组,表示type类型数据的集合,[]中不可写入数字哦。
    • 数组是一种引用数据类型,数组类型变量存在于JVM的栈区上。new来初始化时,数组中的数据存在于上(凡是new出来的东西,都在堆中保存)。

2.2:数组的基本使用:

2.2.1:获取数组长度(元素个数):

int[] arr = {1,2,3,4,5};
int len = arr.length;//数组名.length 即可获取数组长度(元素个数)
System.out.println(len);

2.2.2:访问数组元素:

  • 下标访问:
int[] arr = {1,2,3,4,5};
System.out.println(arr[3]);
//4

注意:下标的有效范围是[0,arr.length),访问时下标一旦越界,编译时直接抛出异常。

2.2.3:遍历数组:

  • 普通for循环+数组下标:
int[] arr = {1,2,3,4,5};
for (int i = 0,;i < arr.length;i++){
	System.out.print(arr[i]+" ");
}
  • 增强for循环(for-each):
int[] arr = {1,2,3,4,5};
for ( int x :arr ){
	System.out.print(x+" ");
}

🙋‍♀️如何理解for each循环?
:”左边的变量,负责接收数组中元素的值。随着遍历,x的值也不断发生改变。(左边的相当于一个容器,负责接收for each 循环按顺序遍历出元素的值)
🤷‍♀️什么时候使用for-each循环?
当你只是想通过遍历来获取数组元素时,而不牵涉下标,这个时候,可以选择使用for-each循环~

  • 借助java.util.Arrays(操作数组的工具类)
import java.util.Arrays;

public class TestDemo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        String str = Arrays.toString(arr);
        System.out.println(str);
    }
}

java 二维数组的创建及初始化 画出其引用对象在堆、栈内存中的存储示意图,Java岛冒险记【从小白到大佬之路】,java,开发语言,数据结构,jvm
🧘‍♀️其实String toString(int[] arr)方法就是用for循环来实现的

//toString(int[] a)源码:
 public static String toString(int[] a) {
        if (a == null)
            return "null";
        int iMax = a.length - 1;
        if (iMax == -1)
            return "[]";

        StringBuilder b = new StringBuilder();
        b.append('[');
        for (int i = 0; ; i++) {
            b.append(a[i]);
            if (i == iMax)
                return b.append(']').toString();
            b.append(", ");
        }
    }

2.3:深入理解Java中数组

2.3.1:数组在内存中如何存放?

🤸‍♀️首先,你需要知道:

  • JVM内存分布:
    java 二维数组的创建及初始化 画出其引用对象在堆、栈内存中的存储示意图,Java岛冒险记【从小白到大佬之路】,java,开发语言,数据结构,jvm

  • Java中的局部变量存放在栈区

  • Java中的对象存放在堆区

  • Java中数组类型变量,是引用数据类型

  • Java中数组是一个对象

🐣然后,我们分析这段代码:

int[] arr = {1,2,3,4,5};
  • arr 是main函数中的局部变量,存放在堆上
  • 数组实体(数组实例,也就是对象),存放在堆上
    java 二维数组的创建及初始化 画出其引用对象在堆、栈内存中的存储示意图,Java岛冒险记【从小白到大佬之路】,java,开发语言,数据结构,jvm
    👯‍♀️总结:
  • 数组类型是引用数据类型,数组类型变量存放的是数组实例在堆内存中的地址。

2.3.2:关于“引用”

  • 引用其实本质就是对象的地址
  • 一个引用类型变量只能储存一个对象的地址(即一个引用只能指向一个对象)
  • 引用类型变量置为null说明这个引用(引用变量)不指向任何对象
  • 引用类型变量不一定都在栈上。(后期讲)

注意:Java中的null表示无效引用,没有规定null表示的是0号内存。(C语言中规定NULL表示的是0号内存,不能被访问)。

Part3:Java中的二维数组:

3.1:二维数组的定义&初始化:

3.1.1:定义数组并初始化:

//eg:一个2行3列的数组
int [][] arr = {{1,2,3},{4,5,6}};//静态初始化
  • 注意:外层大括号里表示行的内存花括号不可省略!
//动态初始化
int [][] arr = new int [][]{{1,2,3},{4,5,6}};/
int [][] arr = new int [][]{{1,2},{4,5,6}};

💁‍♀️第二行是这样理解的:
java 二维数组的创建及初始化 画出其引用对象在堆、栈内存中的存储示意图,Java岛冒险记【从小白到大佬之路】,java,开发语言,数据结构,jvm

🙅‍♀️也就是说,并不是arr[0][2]没有初始化,而是根本不存在arr[0][2]这个元素!
java 二维数组的创建及初始化 画出其引用对象在堆、栈内存中的存储示意图,Java岛冒险记【从小白到大佬之路】,java,开发语言,数据结构,jvm

3.1.2:定义数组不初始化

//每一个元素默认初始化为0
int [][] arr1 = new int[2][3];
//省略列的(不规则二维数组)
int [][] arr2 = new int[2][0];
arr[0] = new int[2];
arr[1] = new int[3];

tips:只定义,不初始化时,二维数组中每个元素默认初始化为0

  • 注意:Java中二维数组可以省略列,但不能省略行!
  • 省略列时:
    java 二维数组的创建及初始化 画出其引用对象在堆、栈内存中的存储示意图,Java岛冒险记【从小白到大佬之路】,java,开发语言,数据结构,jvm

3.2:如何理解Java中的二维数组:

  • 二维数组其实是一个特殊的一维数组:即元素类型是数组引用的数组(int [ ])。
    java 二维数组的创建及初始化 画出其引用对象在堆、栈内存中的存储示意图,Java岛冒险记【从小白到大佬之路】,java,开发语言,数据结构,jvm

  • 行/列下标对应关系:
    java 二维数组的创建及初始化 画出其引用对象在堆、栈内存中的存储示意图,Java岛冒险记【从小白到大佬之路】,java,开发语言,数据结构,jvm

  • 注意:两个/多个一维数组作为数组元素时,数组实体在堆内存上并没有物理位置上的相邻关系。
    比如下图的元素3和元素4在内存中很有可能是不相邻的。

java 二维数组的创建及初始化 画出其引用对象在堆、栈内存中的存储示意图,Java岛冒险记【从小白到大佬之路】,java,开发语言,数据结构,jvm

3.3:二维数组的遍历:

  • 普通for循环+数组下标遍历:
public static void main(String[] args) {
        int[][] arr = {{1,2,3},{4,5,6}};
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j]+" ");
            }
        }
    }
  • for-each循环:
public static void main(String[] args) {
        int[][] arr = {{1,2,3},{4,5,6}};
        for (int[] ret:arr) {
            for (int x:ret) {
                System.out.print(x+" ");
            }
        }
    }
  • 使用Arrays.deepToString(Object [ ])
public static void main(String[] args) {
        int[][] arr = {{1, 2, 3}, {4, 5, 6}};
        String strArr = Arrays.deepToString(arr);
        System.out.println(strArr);
    }

Part4:总结:

  • 一维数组类型是引用数据类型,该类型变量存放的是一维数组实例在堆内存上的地址。
  • 二维数组本质是一维数组,二维数组的每一个元素均为一维数组类型(引用数据类型)

🏄‍♀️下期预告–详细讲解Java中最重要的语法–类&对象
🙆‍♀️专栏系列文章:

  • 【爪洼岛冒险记】第4站:Java中如何进行控制台输入&输出?用Java实现猜数字小游戏;超详细讲解Java中的方法:方法的重载,方法的签名
  • 【爪洼岛冒险记】第3站:任务1:学会int和String之间的转换;任务2:将Java运算符全部收入囊中~ 任务3:拿下Java中的类型提升
  • 【爪洼岛冒险记】第2站:带你学会:Java中三种输出语句,java中基本数据类型,学会变量,常量,类型转换知识点
  • 【爪洼岛冒险记】第1站:Java重要特性,JDK,JRE,JVM区别和联系,环境变量

🙈原创不易,如果对你有所帮助,还请三连+关注!我是瑶瑶子,持续输出优质文章!

java 二维数组的创建及初始化 画出其引用对象在堆、栈内存中的存储示意图,Java岛冒险记【从小白到大佬之路】,java,开发语言,数据结构,jvm文章来源地址https://www.toymoban.com/news/detail-794128.html

到了这里,关于【JavaSE】多图解,保姆级详细讲解数组、二维数组--建议收藏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 30天入门Python(基础篇)——第2天:Python安装(保姆级)与IDE的认识与选择+详细安装教程(万字建议收藏)

    🔥🔥本文已收录于《30天学习Python从入门到精通》 🉑🉑本专栏专门 针对于零基础和需要重新复习巩固的同学 所准备的一套基础班教学, 从0基础到精通Python ,轻松掌握Python,欢迎各位同学订阅,专栏订阅地址:点我直达 🤞🤞此外如果您已工作,如需利用Python解决办公中

    2024年02月07日
    浏览(44)
  • 大数据知识图谱——基于知识图谱+flask的大数据(KBQA)NLP医疗知识问答系统(全网最详细讲解及源码/建议收藏)

    知识图谱是将知识连接起来形成的一个网络。由节点和边组成,节点是实体,边是两个实体的关系,节点和边都可以有属性。知识图谱除了可以查询实体的属性外,还可以很方便的从一个实体通过遍历关系的方式找到相关的实体及属性信息。 基于知识图谱+flask的KBQA医疗问答

    2024年02月01日
    浏览(43)
  • 【JavaSE】一维数组和二维数组详解

    欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 一维数组 基本语法 初始化 遍历和打印 数组是引用型变量 基本类型变量与引用类型变量的区别 null 数组传参和返回 总结 二维数组 基本语法 初始化 遍历和打印 数组:可以看成是相同类型元素的

    2024年04月09日
    浏览(34)
  • JavaSE核心基础-二维数组-笔记

    1.二维数组概述 所谓二维数组就是数组中的数组,它的定义格式和一维数组很像。可以保存更多同类型的数据。二维数组的每一个元素是一个一维数组。 2. 二维数组定义的三种格式以及使用   1)格式1(动态初始化): int[][] arr = new int [3][2] ; 定义了名称为arr的二维数组,二

    2024年01月24日
    浏览(27)
  • anaconda常用命令大全(保姆级别建议收藏)

    一、创建虚拟环境 二、激活/使用/进入某个虚拟环境 三、退出当前环境 四、复制某个虚拟环境 五、删除某个环境 六、查看当前所有环境 七、查看当前虚拟环境下的所有安装包 八、安装或卸载包(进入虚拟环境之后) 九、分享虚拟环境 十、源服务器管理 conda当前的源设置在

    2024年02月16日
    浏览(42)
  • Stable Diffusion最全保姆级安装教程(建议收藏)

    Midjourney 因细致的画图风格备受大家的欢迎,但由于其网络环境以及会员费,导致入门门槛过高,拦住了很多对AIGC感兴趣的小伙伴。 今天阿良就教大家,不需要魔法,也不用交会员费,尽情玩转AI出图的保姆级安装教程,建议收藏。 对于Midjourney 高额的会员费,SD的高性价比

    2024年02月05日
    浏览(28)
  • JavaSE进阶 | 二维数组的定义和使用、查找和排序算法

    目录 🥅二维数组 ❤️二维数组的遍历 ❤️动态初始化二维数组 🥅数组知识点总结 🥅习题练习 ❤️用数组模拟栈 ❤️模拟酒店的订房退房功能 ❤️杨辉三角 ❤️把数据存入数组,保证值各不相同 ❤️数组元素的赋值与数组复制 ❤️数组元素的反转 ❤️数组的扩容与缩

    2024年02月14日
    浏览(30)
  • 抖音小店怎么做精细化运营?保姆级教程分享,建议收藏慢慢看

    大家好,我是电商花花。 可能有些朋友只是看到网上会频繁的看到抖音小店无货源这个词,也有很多刚做抖店的说自己店铺不出单,或者出了几单后就没有流量,但是很多新手不知道怎么精细化运营店铺。 今天给大家分享一下,新手小白怎么做抖音小店精细化运营,我们就

    2024年01月16日
    浏览(27)
  • 一文深度讲解JVM 内存分析工具 MAT及实践(建议收藏)

    1. 前言 熟练掌握 MAT 是 Java 高手的必备能力,但实践时大家往往需面对众多功能,眼花缭乱不知如何下手,小编也没有找到一篇完善的教学素材,所以整理本文帮大家系统掌握 MAT 分析工具。 本文详细讲解 MAT 众多内存分析工具功能,这些功能组合使用异常强大,熟练使用几

    2024年02月09日
    浏览(32)
  • 保姆式手把手带你入门期权——期权行权全步骤(建议收藏)

    量化、期权实盘开户找我哦~ 期权行权是指期权合约中的权利方(买方)在合约规定的时间(到期日)、价格(执行价)和方式下,行使其购买或卖出的权利。在行权过程中,买方有权按照合约规定的价格执行期权,参与相关资产的交易。 首先我们要了解50ETF期权的基本合约

    2024年02月03日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包