• java数组和应用


    🍬博主介绍
    👨‍🎓 博主主页:喵的主页
    ✨主攻领域:【大数据】【java】【python】【面试分析】


    1. 概述

    和Python中一样, Java中也是有用来同时存储多个同类型元素的容器的, 那就是: 数组.

    2. 格式

    •动态初始化: 我们给定长度, 由系统给出默认初始化值.

    格式1 数据类型[] 数组名 = new 数据类型[长度];
    格式2 数据类型 数组名[] = new 数据类型[长度];
    解释: 上述两种定义方式只是写法不同, 并无其他区别.

    •静态初始化: 我们给定初始化值, 由系统指定长度.

    格式1 数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3};
    格式2 数据类型[] 数组名 = {元素1, 元素2, 元素3};
    解释: 上述两种定义方式只是写法不同, 并无其他区别.

    3. 示例: 定义数组

    需求
    1.创建int类型的数组, 用来存储3个元素.
    2.创建int类型的数组, 存储数据11, 22, 33.
    参考代码

    public class ArrayDemo01 {
        public static void main(String[] args) {
            //1. 创建int类型的数组, 用来存储3个元素.
            //我们制定长度, 由系统给出默认值.
            //格式一:
            int[] arr1 = new int[3];		//推荐.
            //格式二:
            int arr2[] = new int[3];
    
            //2. 创建int类型的数组, 存储数据`11, 22, 33`.
            //我们直接传入元素, 由系统指定长度.
            //格式1
            int[] arr3 = new int[]{11, 22, 33};
            //格式2
            int[] arr4 = {11, 22, 33};		//推荐.
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    4. 数组各部分解释

    此处以动态初始化举例:
    数据类型[] 数组名 = new 数据类型[长度];

    //例如:
    int[] arr = new int[3];  
    
    • 1
    • 2

    解释:

    •数据类型: 指的是数组中存储元素的数据类型
    例如: 如果是int, 说明数组中只能存储int类型的数据, 如果是String, 则说明数组中只能存储字符串.
    •[]: 表示是一个数组.
    •数组名: 类似于之前定义的变量名, 要符合命名规范, 我们可以通过数组名来操作数组.
    •new: 它是一个关键字, 表示用来创建数组对象的.

    5. 数组的特点及基本用法

    5.1 特点

    1.数组中的每个元素都是有编号的, 且编号是从0开始的. 可以方便我们快速操作数组中的元素.
    解释: 编号也叫索引(这个是最常见的念法), 下标, 角标. index
    2.数组中每个元素都有默认值.
    例如:
    1.int类型数组, 元素默认值是: 0
    2.double类型的数组, 元素默认值是: 0.0
    3.boolean类型的数组, 元素默认值是: false
    4.String类型的数组, 元素默认值是: null

    5.2 基本用法

    1.通过数组名[索引]的形式, 可以快速获取数组中的指定元素.

    //格式
    数组名[索引]
    
    //例如:
    int[] arr = {11, 22, 33};
    System.out.println(arr[0]);	//打印结果是: 11
    2.通过数组名[索引] =;的方式, 可以修改数组中的指定元素值. 
     //格式
    数组名[索引] =;
    
    //例如:
    int[] arr = {11, 22, 33};
    System.out.println(arr[1]);	//打印结果是: 22
    arr[1] = 222;
    System.out.println(arr[1]);	//打印结果是: 222
    3.通过数组名.length的方式, 可以获取数组的长度.
     //格式
    数组名.length
    
    //例如:
    int[] arr = {11, 22, 33};
    System.out.println(arr.length);	//打印结果是: 3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    5.3 示例: 数组的基本用法

    需求
    1.定义一个长度为5的int类型的数组.
    2.打印数组中的第3个元素.
    3.设置数组中的第一个元素值为11.
    4.获取数组中的第一个元素值, 并将其赋值给变量a, 然后打印.
    5.打印数组的长度.
    参考代码

    public class ArrayDemo02 {
        public static void main(String[] args) {
            //1. 定义一个长度为5的int类型的数组.
            int[] arr = new int[5];
            //2. 打印数组中的第3个元素.
            System.out.println(arr[2]);
            //3. 设置数组中的第一个元素值为11.
            arr[0] = 11;
            //4. 获取数组中的第一个元素值, 并将其赋值给变量a, 然后打印.
            int a = arr[0];
            System.out.println(a);
            //5. 打印数组的长度.
            System.out.println(arr.length);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    6. 数组的内存图

    6.1 内存解释

    内存是计算机中的重要原件,也是临时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。
    即: Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
    JVM的内存划分

    1.栈: 存储局部变量以及所有代码执行的.
    局部变量: 指的是定义在方法中, 或者方法声明上的变量.
    特点: 先进后出.
    2.堆: 存储所有new出来的内容(即: 对象).
    特点: 堆中的内容会在不确定的时间, 被GC回收.
    3.方法区: 存储字节码文件的.
    字节码文件: 指的是后缀名为.class的文件.
    4.本地方法区:
    和系统相关, 了解即可.
    5.寄存器
    和CPU相关, 了解即可.

    6.2 案例: 一个数组内存图

    查看如下代码:

    public class ArrayDemo03 {
        public static void main(String[] args) {
            int[] arr = new int[3];
            System.out.println(arr[0]);	//打印数组中的第一个元素, 值为: 0
            System.out.println(arr);    //[I@1540e19d
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    其中[I@1540e19d是arr数组的地址值, 那这段代码在内存中的执行流程是怎样的呢? 我们一块儿来看下:
    图解
    在这里插入图片描述

    7. 两个小问题

    数组是我们在实际开发中用到的比较多的容器, 在使用它的时候, 很可能会遇到如下的两个问题:
    1.数组索引越界异常(ArrayIndexOutOfBoundsException)
    2.空指针异常(NullPointerException)

    7.1 数组索引越界异常

    产生原因 访问了数组中不存在的索引.
    解决方案
    访问数组中存在的索引即可.
    示例
    1.定义int类型的数组, 存储元素11, 22.
    2.打印数组中的第2个元素.
    3.尝试打印数组中的第3个元素.
    参考代码

    public class ArrayDemo06 {
        public static void main(String[] args) {
            //1. 定义int类型的数组, 存储元素11, 22.
            int[] arr = {11, 22};
            //2. 打印数组中的第2个元素.
            System.out.println("arr[1]: " + arr[1]);
            //3. 尝试打印数组中的第3个元素.
            System.out.println("arr[2]: " + arr[2]);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    7.2 空指针异常

    产生原因
    访问了空对象. 即: 对象为空, 你还去调用它的一些方法, 肯定不行.
    解决方案
    对对象赋具体的值即可.
    示例
    1.定义int类型的数组, 存储元素11, 22.
    2.将null(空常量)赋值给数组.
    3.尝试打印数组的第一个元素.
    参考代码

    public class ArrayDemo07 {
        public static void main(String[] args) {
            //1. 定义int类型的数组, 存储元素11, 22.
            int[] arr = {11, 22};
            //2. 将null(空常量)赋值给数组.
            arr = null;
            //3. 尝试打印数组的第一个元素.
            System.out.println("arr[0]: " + arr[0]);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    8. 数组的常见操作

    数组是我们在实际开发中用到的比较多的一种容器, 它的常见操作如下:
    1.遍历数组.
    2.获取数组的最值(最大值, 或者最小值).
    3.反转数组.

    8.1 案例一: 遍历数组

    需求
    1.定义int类型的数组arr, 存储元素11, 22, 33, 44, 55.
    2.通过for循环, 遍历数组.
    参考代码

    public class ArrayDemo08 {
        public static void main(String[] args) {
            //1. 定义int类型的数组arr, 存储元素11, 22, 33, 44, 55.
            int[] arr = {11, 22, 33, 44, 55};
            //2. 通过for循环, 遍历数组. 
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    8.2 案例二: 获取数组的最大值

    需求
    已知各位美女的颜值如下图, 请求出下图中, 颜值最高的数字, 并打印到控制台上.
    即:求数组int[] arr = {5, 15, 2000, 10000, 100, 4000};的最大值.

    参考代码

    public class ArrayDemo09 {
        public static void main(String[] args) {
            //需求: 求数组int[] arr = {5, 15, 2000, 10000, 100, 4000};的最大值.
            int[] arr = {5, 15, 2000, 10000, 100, 4000};
            int max = arr[0];
            for (int i = 0; i < arr.length; i++) {
                if (max < arr[i])
                    max = arr[i];
            }
            System.out.println("颜值最高的人的颜值为: " + max);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    (02)Cartographer源码无死角解析-(13) 开始轨迹→Node::AddTrajectory()
    Python函数与模块的精髓与高级特性
    【Flink 问题集】The generic type parameters of ‘Collector‘ are missing
    【无标题】
    软件测试黑马程序员基础班-定义介绍,核心课程,计算机的组成
    知识产权之围:跨境电商卖家的法律防线
    PI证书导入总结
    el-table合并单元格-会超出表格内容问题
    RabbitMQ消息的重复消费问题
    Java语言的过滤数据流
  • 原文地址:https://blog.csdn.net/Chad_it/article/details/127397882