• 【Java从入门到精通 06】:Java中的数组


    导航🌌

    目录

    💭数组介绍

    ✨数组的使用(*)

    ✨数组赋值机制(*)

    ✨多维数组 - 二维数组(*)


    💭数组介绍

    数组可以存放多个同一类型的数据。数组也是一种数据类型,属于引用类型。

    即:数组就是一组数据

    ✨数组的使用(*)

    • 使用方式1 - 动态初始化

    数组的定义:数据类型 数组名[] = new 数据类型[大小];

    1. int a[] = new int[5];//创建了一个数组,名字a,存放5个int数据
    2. double b[] = new double[10];//创建了一个数组,名字b,存放10个double数据
    3. String arr[] = new String[10];//创建了一个数组,名字arr,存放10个String数据

    说明:这是定义数组的一种方法,存放其他类型数据的数组可依次类推创建

    • 使用方式2 - 动态初始化

    先声明数组:数组类型 数组名[];

    也可这样声明:数组类型[] 数组名;(在Java中推荐使用这种)

    创建数组:数组名 = new 数据类型[大小];

    1. char a[];
    2. a = new char[10];
    3. int[] b;
    4. b = new int[5];

    使用方式3 - 静态初始化

    初始化数组:数据类型 数组名[] = { 元素值, 元素值, ……};

    1. int a[] = { 1, 2, 3, 4, 5, 6, 7 };
    2. double[] b = { 1.1, 2.2, 3.3, 4.4 };

    ♦细节:

    1. 数组的引用、使用、访问、获取数组元素均是同一个意思
    2. 数组名[下标/索引/index],数组的下标从0开始
    3. 数组的下标必须在指定范围内使用,否则会出现越界访问,报错。有效下标为0 ~ 数组长度-1
    4. 获取数组长度(大小):数组名.length
    5. 数组是多个相同类型数据的组合,实现对这些数据的统一管理
    6. 数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型,但是不能混用
    7. 数组创建后,如果没有赋值,有默认值:int 0,short 0,byte 0,long 0,float 0.0,double 0.0,char \u0000,boolean false,String null

    使用实例,利用冒泡排序对数组arr(9,8,7,6,5,4,3,2,1,0)进行排升序

    1. public class Test{
    2. public static void main(String[] args){
    3. int[] arr = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
    4. //冒泡排序
    5. for(int i=0; i
    6. for(int j=0; j1; j++){
    7. if(arr[j]>arr[j+1]){
    8. int tmp = arr[j];
    9. arr[j] = arr[j+1];
    10. arr[j+1] = tmp;
    11. }
    12. }
    13. }
    14. //打印结果
    15. for(int i=0; i
    16. System.out.print(arr[i] + " ");
    17. }
    18. }
    19. }

    运行结果:


    ✨数组赋值机制(*)

    基本数据类型赋值,这个值就是具体的数据,而且相互不影响。

    数组在默认情况下是引用传递,赋的值是地址

    试着运行下面一段代码:

    1. public class Test{
    2. public static void main(String[] args){
    3. int num1 = 7;
    4. int num2 = num1;
    5. num2 = 3;
    6. System.out.println("num1 = " + num1);
    7. System.out.println("num2 = " + num2);
    8. int[] arr1 = { 1, 4, 7 };
    9. int[] arr2 = arr1;//把arr1的地址赋给arr2
    10. arr2[0] = 3;
    11. //打印输出
    12. System.out.print("arr1: ");
    13. for(int i=0; i
    14. System.out.print(arr1[i] + " ");
    15. }
    16. System.out.println();
    17. System.out.print("arr2: ");
    18. for(int i=0; i
    19. System.out.print(arr2[i] + " ");
    20. }
    21. System.out.println();
    22. }
    23. }

    运行结果:

    数组赋值的内存图(重点):

    数组的扩容与缩减

    扩容思路(缩减思路类似操作即可):

    1. 定义初始数组 int[] arr = { 1, 2, 3 };//要求扩容增加一个元素4
    2. 定义一个新数组 int[] arrNew = new int[arr.length+1];
    3. 遍历arr数组,依次将arr的元素拷贝到arrNew数组
    4. 将4赋值给arrNew[arrNew.length-1]
    5. 让arr指向arrNew,arr = arrNew,那么原来的arr数组就会被当成垃圾回收(销毁),Java中有垃圾自动回收机制,不需要我们去释放


    ✨多维数组 - 二维数组(*)

    二维数组的概念:

    • 二维数组的每个元素都是一维数组,所以如果需要得到每个一维数组的值,还需要再次遍历
    • 访问第i+1个一维数组的第j+1个元素:arr[i][j];
    • 使用方式1:动态初始化

    语法:数据类型[][] 数组名 = new 类型[大小][大小]

    int[][] arr = new int[3][4];
    • 使用方式2:动态初始化

    先声明:数据类型 数组名[][];

    再定义:数组名 = new 类型[大小][大小];

    1. int[][] arr;
    2. arr = new int[3][4];
    • 使用方式3:动态初始化 - 列数不确定(*)

    Java语言的二维数组支持列数可以不一样

    需求:创建下面二维数组,并输出

    j = 0j = 1j = 2
    i = 01
    i = 122
    i = 2333

    代码:

    1. public class Test{
    2. public static void main(String[] args){
    3. int[][] arr = new int[3][];//创建一个二维数组,有三个一维数组且这三个一维数组还没有开辟数据空间
    4. for(int i=0; i
    5. //给每个一维数组开辟空间
    6. //如果没有给一维数组,那么arr[i]就是null
    7. arr[i] = new int[i+1];
    8. //遍历一维数组赋值
    9. for(int j=0; j
    10. arr[i][j] = i+1;
    11. }
    12. }
    13. //打印输出
    14. for(int i=0; i
    15. for(int j=0; j
    16. System.out.print(arr[i][j] + " ");
    17. }
    18. System.out.println();
    19. }
    20. }
    21. }
    • 使用方式4:静态初始化

    定义:数据类型 数组名[][] = { {值1,值2,…},{值1,值2,…},{值1,值2,…},… };

    int arr[][] = { {1,2,3}, {3,3}, {7} };

    细节:

    1. 一维数组声明方式有:int[] x 或者 int x[];而二维数组声明方式有:int[][] y 或者int[] y[] 或者 int y[][]
    2. 二维数组实际上由多个一维数组组成,它的各个一维数组长度可以相同,也可不相同

    学习记录:

    • 📆本篇博客整理于2022.7.30
    • 🎓作者:如何写出最优雅的代码
    • 📑如有错误,敬请指正🌹🌹
    • 🥂关注一波不迷路!如果觉得写的不错,看完了别忘了点赞和收藏啊,感谢支持😏😏
  • 相关阅读:
    多进程与多线程
    同态加密+区块链,在大健康数据隐私保护中的应用
    Hive面试汇总(2022)
    pandas读取一个 文件夹下所有excel文件
    【kylin/ubuntu 】离线命令行基本操作
    数据库系统原理与应用教程(001)—— MySQL 安装与配置:MySQL 软件的安装(windows 环境)
    【VR开发】【Unity】【VRTK】3-VR项目设置
    小记一篇 vuecli4项目 打包内存溢出问题
    [原创][开源]C# Winform DPI自适应方案,SunnyUI三步搞定
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 原文地址:https://blog.csdn.net/m0_62080641/article/details/126067141