Java基础_数组

数组的概述

  • 概述:用来存储或者操作多个数据的容器

  • 使用数组的原因:

    当变量太多的时候,可以用数组。

  • 比较:如果后续需要操作多个数据时,可以使用数组

    ​ 如果后续操作一个或者两个变量时,就没必要使用数组

数组的定义

  • 格式:

    数据类型 [ ] = 数组名称 = new 数据类型 [元素的个数];

  • 解释说明

    • 数据类型:将来数组中存储的数据类型是什么类型,就定义什么类型
    • 【】:表示当前数组是一个,一维数组
    • 数组名称:给数组起一个名字、和变量起名规则相同【小驼峰】
    • = :赋值符号
    • new :表示在内存中给数组中开辟空间的而关键字
    • 数据类型: 和前面的类型保持一致
    • 元素的个数:元素(表示的数据) 存储数据的个数
  • 定义数组后打印数组名称结果:[I@7ea987ac

    • [:表示访问的数组是一个一维数组
    • I:表示访问的数组存储的数据类型是int类型
    • @:是一个普通的字符串,表示分隔
    • 7ea987ac :数组以后会有自己的内存空间,java会通过哈希算法将这个内存空间按地址计算为一个十进制的整数,再将这个十进制的整数转化为十六进制
    • 为了方便统计这个结果就将打印的内容成为数组的地址值,所以数组是引用数据类型

数组的初始化

  • 初始化:给数组分配空间并赋值
动态初始化
  • 定义数组:数据类型 [ ] 数组名称 = new 数据类型 [元素的个数];

  • 定义数组:数据类型 数组名称[ ]= new 数据类型 [元素的个数];

  • 数组的赋值方式:

    • 数组名称 [元素的索引] = 值;【int array[ ] = 10】
    • **索引:**数组会默认给每一个元素分配一个有序的序号,这个序号就叫索引。索引的范围:0–元素的个数-1
    • 数组的取值方式: 数组名称[索引]
  • 注意事项:

    • 存储数据的类型要和定义的类型保持一致

    • 如果数组定义之后,没有给数组赋值,数组有一个默认值

      默认值:整数:0 小数:0.0 字符:‘ ‘ 字符串 null 布尔: false

静态初始化
  • 格式:数组类型[] 数组名称 = new 数据类型 [] {数组的罗列}

  • 注意事项:

    • 静态初始化后面的而括号中不要写元素的个数,罗列数组个数有几个,就存几个

    • 元素罗列值:每个数据用逗号隔开

    • 静态初始化有一种简写格式:

      ​ 数据类型[ ] = 数组名称 = { 元素的罗列};

    • 如果使用简写格式不能将数组的定义和赋值氛围两行编辑

数据内存图示

JVM内存的划分

  • JVM:java虚拟机,运行程序的容器。
  • 在JVM中有很多预区域的划分,不同的区域功能也不同。
  • 分类:
    • **栈内存:**用来执行方法的区域。 先进后出,后进先出
    • 堆内存:用来存储数组、对象等等数据的区域。堆内存的空间大,存储数据量比较大的 数据
    • **方法区:**用来加载类的字节码对象 静态数据
    • **程序计数器区:**控制程序执行
    • **本地方法区:**用来执行本地方法,或者加载本地数据

一个数组存储方式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SRgvgRG9-1645750277839)(file:///C:\Users\12994\AppData\Local\Temp\ksohtml\wps7906.tmp.jpg)]

  • 总结:

    • 定义数组本身也是一个变量,也需要在占内存中分配一段空间来存储地址

    • 数组中的地址在堆内存中开辟

    • 数组名称厚葬保存的是数组在堆内存中的地址

    • 访问数组名称,就是访问地址

    • 通过数组名称和索引访问数据,就是在访问堆内存中数组中的数据

多个数组存储方式

在这里插入图片描述

  • 总结:
    • 在方法中定义了多个数组,在内存中给开辟多个空间来存储地址
    • 使用哦个new关键字之后,便是新建空间,而不是指向原来的空间

两个引用指向同一个数组

在这里插入图片描述

  • 总结:
    • 当将其中一个数组的地址赋值给另外一个变量时,两个变量访问的是同一个数组
    • 如果其中一个变量通过地址改变了数组中的内容,另外一个变量在访问数组的内容时,是修改之后的结果
  • 补充:
    • 引用:表示地址 Java语言中的术语
    • 指针:表示地址 C语言中的术语

数组的异常

  • 异常:在生活中,一场表示不正常的情况

    · 在代码中,导致程序出现问题的错误

  • **异常类型1:**Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException

    ​ 异常 在 线程 主 数组 索引 超过 边界 异常

  • 异常名称:数组索引越界

  • 一场出现的原因:因为数组的索引是有一定范围的:0----元素的个数-1

    ​ 如果访问的索引不指定范围内,程序就出现该异常

  • 异常类型2:Exception in thread “main” java.lang.NullPointerException

    ​ 空 指针 异常

  • 名称:空指针异常

  • 原因:数组地址为空,通过该地址不能访问到,如果偏要访问,就会出现空指针异常

  • 避免:在使用数组之前加一个是否为空的判断。

数组的常用操作

  • 概述:数组中可以存储很多数据,后续再操作这些数据的时候,有一些简单的操作
  • 分类
数组的遍历
  • 遍历:逐个获取数组中的每个元素
  • 思路:数组中的每个元素不是有序的,无法直接快速获取每个元素,但是每个元素的索 引是有序的,可以通过循环来获取索引,再通过获取的索引依次取出每个数据。
  • 补充:数组名称**.length** 可以自动获取数组中元素的个数
数组最值的获取
  • 概述:获取数组的最大值和最小值。
  • 思路:可以先定义一个变量,用来存储最大值。再依次获取数组中的每一个元素,分别定义 的变量比较,如果数组中的元素大于变量中存储的数据,就将变量的值替换,如果数组 中的元素比变量中的值小,就不需要替换。当每个元素都比较之后,变量中存储的就是 最大值。
  • 注意:定义的最大值变量,默认值不能是无关元素,需要赋值为参与比较的元素
数组元素的交换
  • 概述:给定一个数组,交换两个索引元素的位置
数组的反转
  • 概述:1、将数组中的元素逆序排列。

在这里插入图片描述

数组的查找
  • 概述:给定一个数组,以及一个数据,获取该数据在数组中的位置
数组的排序
  • 概述:将数组中的元素按照从小到大或者从大到小的方式依次排列
  • 方式:1、冒泡排序
for(i = 0 ;i < a.length;i++){
    for(j = 0;j < a.length -i -1;j++ ){
        if(a[i] > a[i+1]){
            int temp = a[i];
            a[i] = a[i+1];
            a[i+1] = temp;
        }
    }
}

二维数组

  • 概述:数组中存储的数据是另外一些一维数组的地址,那么该数组就是一个二维数组

  • 二维数组的初始化:

    动态初始化:

    举例说明:int[][] arr = new int[num1][num2];

    解释:

    • int:二维数组中的每一个一维数组中存储的元素是int类型
    • 【】【】:表示当前数组是二维数组
    • num1:表示当前二维数组中可以存储一维数组的个数
    • num2:表示每一个一维数组中可以存储的数据的个数

图示:

在这里插入图片描述

二维数组的静态初始化

  • 格式

    举例:int[][] arr = new int[][]{ {1,2,3},{100,200},{3000} };

    简写格式:int[][] arr = {{1},{200,300},null}

二维数组的遍历

一维数组的个数

  • num2:表示每一个一维数组中可以存储的数据的个数

图示:

[外链图片转存中…(img-IohN1qDF-1645750277842)]

二维数组的静态初始化

  • 格式

    举例:int[][] arr = new int[][]{ {1,2,3},{100,200},{3000} };

    简写格式:int[][] arr = {{1},{200,300},null}

二维数组的遍历

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮卡丘不断更

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值