数据结构特性解析 (一) 数组

前言

数组是java中最基本的数据结构,有很多更高级的数据接口实现方式都是使用的数组,所以了解数组是很重要的

描述

数组是一个对象,内部有一块连续的内存,自身只占用很小的内存,其他位置都是根据长度和类型而分配的值对象或者引用值对象

特点

1. 数组长度在初始化时确定且无法修改

由上图可见,数组并没有add或修改长度的方法

2.数组每个位置所占的内存大小是在初始化时固定的

组中存储对象都是存储的其引用值,在同一个环境下(32位一般4个字节,64位4到8个字节)引用值的大小都是一样的,因此对象数组每个位置所占的内存大小也是一样的

而由于64位地址比32位地址更大,所以在64位环境下,对象数组也会比32位环境下占用的空间更大

果存储的是基本类型的话,则每个位置所占用的大小都是该基本数据类型的大小

ps:基本数据占用内存大小:Java 基本数据类型内存占用-CSDN博客

3.数组是一个创建在堆内存中的对象,并且内存占用是连续的

由于数组的前两个特性,因此被设计为内存连续的,这样查找速度更快(因为每个位置大小固定,并且位置连续,所以只需要通过向阵列头部的地址添加合适的偏移来找到需要的内存地址)

但是这样的设计也会使新建大数组时寻找不到合适的内存空间(有可能空间足够,但不是连续的)而引发内存重排序(gc?)?  有待考究

图示(由于堆的特性和对象自动回收,很有可能会出现下面图示的情况):

如上图,想创建一个长度为5的数组,可是堆内存中并没有一块连续的长度够的内存,因此可能会引发内存重排序(gc?)?,然后使内存整齐,并腾出足够的连续的空间,可以创建出对应的数组,因此数组也是一个对内存要求严格的数据结构

4.数组随机查找比较快

因为特性3,数组根据索引的方式去查找数据,会比较快,不用进行循环或多次寻址

而遍历查询则需要遍历索引来循环从数组中取出

5.数组支持嵌套

比如:  int[][] ints =new int[10][10];//一个10*10的二维数组

取用第一层数组的第5个里的第1个:  int i = ints[4][0];

ps:也支持多层嵌套,叫做n维数组,因为平时用不到,所以就不写了

下一篇: 数据结构特性解析 (二) ArrayList

如有错误或补充,请各位大佬指出,我会尽快修改

对Kotlin或KMP感兴趣的同学可以进Q群 101786950

如果这篇文章对您有帮助的话

可以扫码请我喝瓶饮料或咖啡(如果对什么比较感兴趣可以在备注里写出来)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值