Java 数组内容笔记

Java 数组内容笔记

1.一维数组基本概念

  • 当需要记录多个类型相同的数据内容时,则声明一个一维数组即可,一维数组本质上就是在内存空间中申请一段连续的存储空间
  • 数组是相同类型的多个元素的容器,元素是线性顺序排列,在Java中属于引用数据类型

2.一维数组的声明方式

  • 数据类型[] 数组名称= new 数据类型[数组的长度];
    
  • 数组.length可以获取数组的长度

  • 通过索引或下标访问数组中的每一个元素(0 ~ n - 1)

在这里插入图片描述

  • 基本类型的数组(数据元素为基本类型)创建后,其元素的初始值:

    • byte、short、char、int、long0
    • floatdouble0.0
    • booleanfalse
  • 数组声明的种类:

    • 动态数组:声明数组时没有初始化数据元素,保留默认值

    • 静态数组:在声明数组时初始化数据元素

      • 静态数组精简版

        // 静态数组-简化版
        char[] arr4 = {'a', 'b', 'c'};
        for(int i = 0; i < arr4.length; i++) {
            System.out.println("THe index " + i + " : " + arr4[i]);
        }
        
      • 静态数组标准版

        // 静态数组-标准版
        boolean[] arr5 = new boolean[]{true, false, true};
        for(int i = 0; i < arr5.length; i++) {
            System.out.println("THe index " + i + " : " + arr5[i]);
        }
        

3.内存结构分析

  • int[] arr1 = new int[2];
    // 对此语句进行分析,与一般定义一个变量进行类比,左侧相当于在内存中申请了一块内存空间,而右边的new也是申请了一块内存空间,进而分析两个部分
    
  • 内存结构之栈区

    • 用于存放程序运行过程当中所有的局部变量。一个运行的Java程序从开始到结束会有多次变量的声明。
    • 局部变量:在方法体中直接声明的变量就叫局部变量
    • 块变量:{ }或()中声明的变量叫做块变量
  • 内存空间之堆区

    • JVM会在其内存空间中开辟一个称为“”的存储空间,这部分空间用于存储使用new关键字创建的数组和对象。
自我总结:
  • 在内存空间中为数组申请内存空间时,栈区存放堆区中通过new为数组申请的内存空间的地址,而堆区中才是真正存放数组的地方

  • 基本数据类型在栈区中存放的是具体的数据内容,而像数组这些引用数据类型在栈区存放的是堆区中数组的内存地址

  • 数组名仅仅代表的是数组的内存地址
    在这里插入图片描述

4.数组的优缺点

  • 优点:
    • 可以直接通过下标(或索引)的方式访问指定位置的元素,速度很快。
  • 缺点:
    • 数组要求所有元素的类型相同。
    • 数组要求内存空间必须连续,并且长度一旦确定就不能修改。
    • 增加和删除元素时可能移动大量元素,效率低。

5.考点

  • // 将arr1和arr2指向了堆区中同一块内存空间,
    arr2 = arr1;
    // 数组名只是记录堆区的内存空间
    // arr2原来对应的堆区的内存空间就没有指向,就会丢失,根据JVM的自动垃圾回收机制,会自动扫描没有指向的内存空间,进行回收操作
    
  • 变长数组

    // 变长数组,主要指变量可以作为数组的长度,而不是说数组的长度可以变化
    int[] scores = new int[num];
    

6.数组的工具类

  • java.util.Arrays

    • 可以实现对数组中元素的遍历、查找、排序等操作
      在这里插入图片描述

    • toString()

      • int[] arr1 = new int[]{10, 20, 30, 40, 50};
        // 可以实现对数组元素的遍历
        System.out.println("第一个数组的元素有:" + Arrays.toString(arr1));
        
    • fill()

      • int[] arr2 = new int[5];
        Arrays.fill(arr2, 10);
        
    • equals()

      • System.out.println("arr1, arr2数组是否相同:" + Arrays.equals(arr1, arr2));
        
    • sort()

      • int[] arr3 = new int[]{10, 50, 30, 20, 40};
        // 默认升序排列
        Arrays.sort(arr3); // 会直接修改原数组的值
        
    • binarySearch()

      • System.out.println("30在arr3数组中的下标是:" + Arrays.binarySearch(arr3, 30));
        

7.二维数组

  • 二维数组本质上就是由多个一维数组摞在一起组成的数组,二维数组中的每个元素都是一维数组,而一维数组中的每个元素才是数据内容。
  • 一维数组的长度(length)是元素的个数,二维数组的长度(length)是二维数组的行数,二维数组[n].length是二维数组第(n-1)行的列数

8.二维数组的声明和初始化

  • 数据类型[][] 数组名称= new 数据类型[行数][列数]; 
    
    • // 1.声明一个int类型的两行三列二维数组
      int[][] arr1 = new int[2][3];
      
  • 数据类型[][] 数组名称= {{元素1, 元素2,...}, ...};
    
    • // 第一种初始化-标准型
      int[][] arr2 = new int[][]{{1, 2, 3}, {4, 5, 6}};
      
      // 第二种初始化-精简型
      int[][] arr3 = {{1, 2, 3}, {4, 5, 6}};
      
  • // 创建二维数组必须要指定行或者行列都指定,不能单纯指定一个列
    int[][] arr1 = new int[1][];
    //int[][] arr2 = new int[][1];
    int[][] arr3 = new int[1][1];
    

9.二维数组的考点

二维数组在底层并不是呈梯形存储,而依然是类似于一维数组式的存储,所以二维数组只给定行数也没有关系,不影响数组在底层的存储。
// 4.二维数组考点
int[][] arr4 = new int[3][];
arr4[0] = new int[3];
arr4[1] = new int[4];
arr4[2] = new int[5];

层并不是呈梯形存储,而依然是类似于一维数组式的存储,所以二维数组只给定行数也没有关系,不影响数组在底层的存储。

// 4.二维数组考点
int[][] arr4 = new int[3][];
arr4[0] = new int[3];
arr4[1] = new int[4];
arr4[2] = new int[5];
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值