java数组的存储方式

java数组在内存中的存储方式

数组的引用存在栈中,而数组中的元素都存储在堆中。数组作为一种容器,它在堆中所被分配的是一段连续的空间。用来存放元素,这段连续的空间每一个空间都有下标,下标是连续的对应的!

数组作为一种元素容器,它可以存储任意类型的元素,因为可以定义成Object[] 因为它在内存中的存储方式是连续空间,每一个空间下面都有一个下标,所以数组的读取速度是非常的快的,假设要读取arr[9]的数据,那么只需要将数组下标的指针移动9+1个位置,然后就可以找到对应的数据,这对计算机来说是非常快的。

在这里插入图片描述
如图 ,这个可以看出来我创建的数组长度为7,数组在创建时在堆中分配空间时长度就已经给定了,它不能做扩展!这也导致了它的机动性大大的降低!为什么不能做扩展?因为数组空间的前面的空间和后面的空间也可能存储着其他的数据,数组要扩展的话只能找别的空间,从而无法保证自己空间连续的特性!

在这里插入图片描述

那我们用着用着数组长度不够了怎么办?直接往里面存会怎么样?

!!!我靠!直接Java.lang.ArrayIndexOutOfBoundsException
数组下标越界异常!那到底怎么办呢!

Arrays类中提供了这样的一个静态方法copyOf();

在这里插入图片描述

这个方法干了个啥事?他直接在堆里开辟了一个新的空间!数组长度定义的更大,然后把原来数组的元素全都复制过来!这样就产生了一个新的数组!

然后我们再把原数组的引用指向新的数组,这样就实现了数组的扩容了!

集合类ArrayList的数据存储方式就是数组!这个集合的特点就是有序,动态扩展,值可重复!其中它的可扩展性就是通过我上述的这个方法来实现的!
那么也可以看出来这个集合的读取速度是非常快!但是扩展速度是非常的慢的!每一次添加数据他都需要复制一次!如果数据量庞大的话,那就非常的慢了!

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值