JavaSE 7(数组)

前言:
在java语言执行程序中,经常需要存储大量的数据,有些时候甚至重复书写几乎完全相同的代码,并且需要声明所有的变量才可以解决一些问题,这就需要要一个高效的有条理的方法。
Java 和许多高级语言都提供了一种称作数组(array)数据结构,可以用它来存储一个元素个数固定且元素类型相同的有序集。
在这里插入图片描述

数组的概念:

1. 数组是同一种类型数据的集合;即能够存放多个相同类型的数据的容器。
2. 数组在内存中是若干个大小一致类型一样地址连续存储空间(究竟什么是地址)

在这里插入图片描述

数组的创建:

1. 数组的创建原理:

不同于基本数据类型变量的声明,声明一个数组变量时并不在内存中给数组分配任何空间。它只是创建一个对数组的引用的存储位置。如果变量不包含对数组的引用,那么这个变量的值为 null。除非数组已经被创建,否则不能给它分配任何元素。声明数组变量之后,可以使用下面的语法用 new 操作符创建数组,并且将它的引用賦给一个变量。

2. 数组的创建流程:

1.函数中定义变量空间并起名
2.在堆内存中根据长度创建数组
3.对每一个元素进行默认初始化 int->0 double->0.0 boolean->false
4.将数组中第一个元素的地址当成整个数组的地址传递给变量
5.变量指向该数组(引用数据类型)

3. 数组的创建格式:

元素类型[] 数组名 = new 元素类型[元素个数或数组长度]

数组大小和默认值:

1.

当给数组分配空间时,必须指定该数组能够存储的元素个数,从而确定数组大小。创建数组之后就不能再修改它的大小。

2.

可以使用 arrayRefVar.length 得到数组的大小。例如:
myList.length 为 10。
当创建数组后,它的元素被賦予默认值,数值型基本数据类型的默认值为 0, char 型的默认值为 ‘OOOO’,boolean 型的默认值为 false。

访问数组元素:

1. 数组的访问原理:

数组元素可以通过下标访问。数组下标是基于 0的,也就是说,其范围从 0 开始到arrayRefVar.length-1结束。

2. 例如:

int[] arr = new int[3];
arr[0] = 3;
//给数组编号(角标)为0的空间中存放int类型的常量值3
System.out.println(arr[1]);//输出数组编号为1空间中的值

在这里插入图片描述

在这里插入图片描述

数组内存:

1. Java的内存分配:

Java对内存空间的划分:
五部分:栈,堆,方法区,本地方法区,寄存器。

寄存器:存储CPU计算的一些临时数据

本地方法区:存储操作系统执行的部分代码

方法区:存储应用软件执行的部分代码

栈内存:存储都是局部变量。只要是在方法中定义的变量都是局部变量。一旦变量的生命周期结束该变量就被释放。

堆内存:存储都是实体(对象),每一个实体都有一个首地址值。堆内存的变量都有默认初始化值。不同类型不一样。(int-0 double-0.0 boolean-false char-’\u0000’。)

当实体不在使用时,就会被垃圾回收机制处理。

在这里插入图片描述

2. 数组的内存分配:

int[] arr = new int[3];
arr = null;
public static void main(String[] args){
int[] arr = new int[3];
arr = null;
}

在这里插入图片描述
图解说明: 程序执行main方法时,会先在堆内存中开辟数组空间,并为其分配内存地址0x34(假设)。数组各个空间都有默认的编号(角标或索引),接着给数组各个存储空间默认初始化为0。到底数组创建结束,将数组的内存地址赋值给main方法的数组引用变量arr。程序继续执行,将arr引用变量赋值为null即arr不再指向堆中的数组实体。这时这个数组实体将会编程垃圾等待垃圾回收机制收走

数组的查找:

1. 线性查找法:

线性査找法将要査找的关键字 key 与数组中的元素逐个进行比较。这个过程持续到在列表中找到与关键字匹配的元素,或者査完列表也没有找到关键字为止。
线性査找法把关键字和数组中的每一个元素进行比较。数组中的元素可以按任意顺序排列。平均来看,如果关键字存在,那么在找到关键字之前,这种算法必须与数组中一半的元素进行比较。由于线性査找法的执行时间随着数组元素个数的增长而线性增长,所以,对于大数组而言,线性査找法的效率并不高。

在这里插入图片描述

2. 二分查找法:

二分査找法是另一种常见的对数值列表的査找方法。
使用二分査找法前提条件数组中的元素必须已经排好序。假设数组已按升序排列。二分査找法首先将关键字与数组的中间元素进行比较。
考虑下面三种情况:

1.如果关键字小于中间元素,只需要在数组的前一半元素中继续査找关键字。

2.如果关键字和中间元素相等,则匹配成功,査找结束。

3.如果关键字大于中间元素,只需要在数组的后一半元素中继续査找关键字。

在这里插入图片描述

3. 两种查找方法的注意事项及要点提示:
在这里插入图片描述

在这里插入图片描述

数组的扩容:

数组的扩容是用一个内存更大的数组来替换以前的数组,缩减反之,而并不改变原来数组的名字,将原先的数据放入到新数组中,被代替的旧数组则等待被java垃圾回收器收回。

数组的扩容如下图:
在这里插入图片描述

在这里插入图片描述
数组的缩减如下图:

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值