使用数组存储数据时,需要预先在内存中分配固定空间。传统静态数组的大小是预先确定的,当实际存储的数据量较少时,会造成内存浪费。为解决这一问题,动态数组应运而生。我们以实现自定义动态数组来深入理解这一概念。以下为两种数据类型在栈内存和堆内存中的存储原理。

基于该示意图,我们来实现动态数组的创建和末尾数据添加功能。
首先初始化数组并分配内存空间:
private int[] arr=new int[0];
初始数组长度为0。后续操作时,会根据需求创建新大小的数组:
//插入数据
public void insert(int index,int data){
//新数组扩容
int[] nArr=new int[arr.length+1];
nArr[index]=data;
//原数组复制到新数组
for(int i=0;i< arr.length;i++){
if(i<index)
nArr[i]=arr[i];
nArr[i+1]=arr[i]; //空出index位置给插入的值
}
//更新对象头
arr=nArr;
}
由此,我们可以看出,动态数组相较于普通数组,最大的有点在于长度可以动态变化,支持自动扩容,不需要在创建时固定大小,能够根据数据量灵活增加容量。
网硕互联帮助中心



评论前必须登录!
注册