重学Java 8 数组Arr.2

这篇具有很好参考价值的文章主要介绍了重学Java 8 数组Arr.2。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

可现实中,幸福永远缺货

                    ——24.1.17

一、内存图

1.内存:可以理解为“内存条”,所有的软件,程序运行起来都会进入到内存中,占用内存,在java的世界中,将内容划分成了5块

2.分为哪五块呢:

        ①栈(Stack)*

                主要运行方法,方法的运行都会进栈内存运行,运行完毕之后,需要“弹栈”,为了向空间释放内存

        ②堆(Heap)*

                保存的是对象,数组,每new依次,都会在堆内存中开辟空间,并为这个空间分配一个地址值,堆内存中的数据都是有默认值的

                整数:0        小数:0.0        字符:'\u0000'        布尔:false        引用:null

        ③方法区 (Method Area)*

                找到的“预备区”,记录了类和方法的信息

                方法区中主要保存class文件以及其中的信息

                代码运行之前,需要先进内存(方法区)

        ④本地方法栈(Native Method Stack):专门运行native方法(本地方法)

                本地方法可以理解为堆对java功能的扩充

                有很多功能,java语言实现不了,所以就需要依靠本地方法完成(C语言编写)

        ⑤寄存器(pc register):和CPU有关

1.堆、栈、方法区的配合示意图

重学Java 8 数组Arr.2,Java从0到1,java,开发语言

 2.一个数组的内存图

    public static void main(String[] args) {
        int[] arr1 = new int[3];
        System.out.println(arr1);
        System.out.println(arr1[1]);
        arr1[1] =100;
        System.out.println(arr1[1]);
    }

重学Java 8 数组Arr.2,Java从0到1,java,开发语言

3.两个数组的内存图

        我们创建了两个数组,在堆内存中开辟了两个不同的空间,此时修改一个空间中的数据不会影响到另外一个空间的数据

    public static void main(String[] args) {
        int[] arr1 = new int[3];
        System.out.println(arr1);
        System.out.println(arr1[1]);
        arr[1] =100;
        System.out.println(arr1[1]);

        int[] arr2 = new int[3];
        System.out.println(arr2);//地址值
        System.out.println(arr2[1]);
        arr2[1] = 200;
        System.out.println("arr1[1] = " + arr1[1]);
        System.out.println("arr2[1] = " + arr2[1]);
    }

重学Java 8 数组Arr.2,Java从0到1,java,开发语言

重学Java 8 数组Arr.2,Java从0到1,java,开发语言

4.两个数组指向同一片空间内存图 

        arr2不是new出来的,是arr1直接赋值给的,arr1在内存中保存的是地址值,给了arr2,那么arr2的地址值和arr1意义,所以此时arr1和arr2指向了堆内存中的同一片空间(同一个地址值,表示同一个数组),此时改变一个数组中的元素会影响到另外一个数组

    public static void main(String[] args) {
        int[] arr1 = new int[3];
        System.out.println(arr1);
        arr1[1] =100;

        int[] arr2 = arr1;
        System.out.println(arr2);//地址值
        arr2[1] = 200;
        System.out.println("arr1[1] = " + arr1[1]);
        System.out.println("arr2[1] = " + arr2[1]);
    }

重学Java 8 数组Arr.2,Java从0到1,java,开发语言

重学Java 8 数组Arr.2,Java从0到1,java,开发语言

二、二维数组

1.二维数组的定义格式

1.概述:数组中套了多个数组

2.定义格式:

        ①动态初始化

                数据类型[ ][ ] 数组名 = new 数据类型[m][n]

                数据类型 数组名[ ][ ] = new 数据类型[m][n]

                数据类型[ ] 数组名[ ] = new 数据类型[m][n]

        m代表的是二维数组的长度

        n代表的是二维数组中,一维数组的长度

                数据类型[ ][ ] 数组名 = new 数据类型[m][ ] -> 二维数组中的一维数组没有被创建

        ②静态初始化

                数据类型[ ][ ] 数组名 = new 数据类型[ ][ ]{{元素1,元素2,…},{元素1,元素2,…},…}

                数据类型 数组名[ ][ ] = new 数据类型[ ][ ]{{元素1,元素2,…},{元素1,元素2,…},…}

                数据类型[ ] 数组名[ ] = new 数据类型[ ][ ]{{元素1,元素2,…},{元素1,元素2,…},…}

        ③简化的静态初始化

                数据类型[ ][ ] 数组名 = {{元素1,元素2,…},{元素1,元素2,…},…}

                数据类型 数组名[ ][ ] = {{元素1,元素2,…},{元素1,元素2,…},…}

                数据类型[ ] 数组名[ ] = {{元素1,元素2,…},{元素1,元素2,…},…}

    public static void main(String[] args) {
        int[][] arr1 = new int[2][2];
        int[][] arr2 = new int[2][];

        System.out.println();
        String[][] arr3 = {{"唐僧","孙悟空","猪八戒","沙和尚"},{"刘备","关羽","张飞"},{"宋江"},{"贾宝玉","林黛玉"}};
    }

注:动态初始化数组长度必须定死,静态初始化数组长度不用定义好,每一个一维数组的长度根据实际存储的数据数来确定

2.获取二维数组的长度

1.格式:

        数组名.length

 2.获取每一个一维数组长度,需要先遍历二维数组,将每一个一维数组遍历出来

    public static void main(String[] args) {
        String[][] arr1 = {{"唐僧","孙悟空","猪八戒","沙和尚"},{"刘备","关羽","张飞"},{"宋江"},{"贾宝玉","林黛玉"}};
        for (int i = 0; i < arr1.length; i++) {
            //获取每一个一维数组的长度
            System.out.println(arr1[i].length);
        }
    }

重学Java 8 数组Arr.2,Java从0到1,java,开发语言

3.获取、存储二维数组中元素及遍历

获取

①格式:

        数组名[i][j]

        i:代表的是一维数组在二维数组中的索引位置

        j:代表的是元素在一维数组中的索引位置

    public static void main(String[] args) {
        //获取二维数组中的元素
        String[][] arr1 = {{"唐僧","孙悟空","猪八戒","沙和尚"},{"刘备","关羽","张飞"},{"宋江"},{"贾宝玉","林黛玉"}};
        System.out.println(arr1[0][1]);
        System.out.println(arr1[1][0]);
        System.out.println(arr1[2][0]);
        System.out.println(arr1[3][0]);
    }

重学Java 8 数组Arr.2,Java从0到1,java,开发语言

存储

①格式:

        数组名[i][j] = 值

i:代表的是一维数组在二维数组中的索引位置

j:代表的是元素在一维数组中的索引位置

多行列数对齐操作:ALT键不放鼠标下拉

遍历

①先遍历二维数组,将每一个一维数组遍历出来

②在遍历每一个一维数组,将元素获取出来

    public static void main(String[] args) {
        String[][] arr1 = {{"唐僧","孙悟空","猪八戒","沙和尚"},{"刘备","关羽","张飞"},{"宋江"},{"贾宝玉","林黛玉"}};
        for (int i = 0; i < arr1.length; i++) {
            //获取每一个一维数组的长度
            System.out.print(arr1[i].length +" ");
            for (int j = 0; j < arr1[i].length; j++) {
                System.out.print(arr1[i][j]+" ");
            }
            System.out.println();
        }
    }

重学Java 8 数组Arr.2,Java从0到1,java,开发语言

4.二维数组内存图

重学Java 8 数组Arr.2,Java从0到1,java,开发语言

三、总结

重学Java 8 数组Arr.2,Java从0到1,java,开发语言

重学Java 8 数组Arr.2,Java从0到1,java,开发语言

重学Java 8 数组Arr.2,Java从0到1,java,开发语言文章来源地址https://www.toymoban.com/news/detail-797410.html

到了这里,关于重学Java 8 数组Arr.2的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 重学Java 5 idea详细使用和运算符

    慢点跑,前面的路不好走                      ——24.1.14 1.概述:开发工具 2.特点:         a、idea是java写的,所以本地上必须有正确的jdk环境         b、idea自动保存         c、不用我们打开dos命令窗口执行javac和java命令         d、idea有强大的快捷键、生成代码、纠

    2024年02月01日
    浏览(90)
  • (学习打卡2)重学Java设计模式之六大设计原则

       前言:听说有本很牛的关于Java设计模式的书——重学Java设计模式,然后买了(*^▽^*) 开始跟着小傅哥学Java设计模式吧,本文主要记录笔者的学习笔记和心得。 打卡!打卡! 单一职责原则、开闭原则、里氏替换原则、迪米特法则、接口隔离原则、依赖倒置原则。 (引读:

    2024年02月03日
    浏览(51)
  • 两个数组的交集-C语言/Java

    描述         给定两个数组  nums1  和  nums2  ,返回  它们的交集  。输出结果中的每个元素一定是  唯一  的。我们可以  不考虑输出结果的顺序。 (1 = nums1.length, nums2.length = 1000,0 = nums1[i], nums2[i] = 1000) 示例1 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 示例2 输入:

    2024年02月11日
    浏览(40)
  • 寻找数组的中心下标-C语言/Java

    描述         数组  中心下标   是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为  0  ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个中心下标

    2024年02月13日
    浏览(49)
  • 利用java语言中的stream流操作判断一个数组中是否有重复元素

    判断数组中是否有重复元素可以说是每一个编程语言初学者都会遇到的题目,常见的各种搜索算法本文不做赘述了,我们这次介绍的是利用java语言中特有的stream流操作来判断通用类型数组是否包含重复元素。 首先我们声明一个泛型方法: 表明该方法适用于所有类型的数组。

    2024年02月12日
    浏览(50)
  • 用Java(C语言也可以看)实现冒泡排序和折半查找(详细过程图)+逆序数组

      目录 一、冒泡排序 1.冒泡排序介绍 2.排序的思路 3.完整代码 二、折半查找 1.折半查找介绍 2.查找的思路 3.完整代码 三、逆序数组 1.逆序思路 2..完整代码 冒泡排序是众多排序的一种,无论在C语言或者Java中都很常见,后续在数据结构中也会用到 1.冒泡排序介绍 (1)冒泡排

    2024年02月05日
    浏览(46)
  • 从接口获取获取到数组arr=[‘1‘,‘a‘,‘2‘,‘b‘,‘3‘,‘c‘]转换成{number:‘123’,char:‘abc’}

    该代码将原始数组中的每个元素遍历一次,并根据元素类型将其添加到相应的属性中。在这里,我们使用了isNaN()函数来检查一个元素是否为数字。如果是数字,则将其添加到result对象的number属性中;否则,将其添加到result对象的char属性中。最终,输出result对象即可得到所需

    2024年02月06日
    浏览(36)
  • 【Py/Java/C++三种语言详解】LeetCode每日一题240123【模拟】LeetCode2765、最长交替子数组

    LeetCode2765、最长交替子数组 给你一个下标从 0 开始的整数数组 nums 。如果 nums 中长度为 m 的子数组 s 满足以下条件,我们称它是一个 交替子数组 : m 大于 1 。 s(1) = s(0) + 1 。 下标从 0 开始的子数组 s 与数组 [s(0), s(1), s(0), s(1),...,s((m-1) % 2)] 一样。也就是说, s(1) - s(0) = 1 ,

    2024年01月24日
    浏览(42)
  • 开发语言漫谈-Java

            由于C++过于复杂,Java诞生了。与C++相比,Java更易于学习和使用,它去掉C++中的指针和解决了内存管理问题。Java提供了垃圾自动回收机制,自动管理不再使用的内存。Python又进一步简化,使得语法更简洁,更易于阅读和编写。当然随着简化,性能就越来越低。    

    2024年04月10日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包