动态数组
动态数组意义
为什么会有动态数组这个概念?相比于普通的数组,普通数组有很多的局限性,比如数组的长度是固定的,不能随意增加,只能根据固定的数字长度写入适当的元素。而动态数组就很好的解决了这个问题,动态数组能根据写入的元素个数增加相应的数组长度。
实现动态数组
数组扩容
数组一旦装满元素,可进行数组扩容操作,即新建一个更长的数组,并转移元素至新数组,并将引用指向新数组,完成数组的变更。
public class DynamicArray {
int [] A;
int index ;
int length ;
public DynamicArray(int n) {//创建对象时传入一个初始容量
if(n<0){
throw new IllegalArgumentException("非法数字,数字需大于0");
}
length = n;
A = new int[length];
index = 0;
}
public void add (int a){
if(index == length){//扩容
int oldLength = length;
length = oldLength + (oldLength >> 1);
int [] newA = new int[length];
for(int i = 0 ; i < oldLength ; i++){//将原数组中的元素全部移动到新数组中
newA [i] = A [i];
System.out.println(newA[i]);
}
A = newA;// 用原本数组对象变量名存储新数组对象变量名中的引用地址
}
A [index] = a;
index++;
}
public int get(int index){
if(index>=0&&index < length){
int a = A[index];
return a;
}
throw new ArrayIndexOutOfBoundsException ("inde:"+index+" length:"+length);
}
public static void main(String[] args){
DynamicArray B = new DynamicArray(10);
for(int i = 0;i < 30; i++){
B.add(6);
}
System.out.println(B.get(20));
}
}
数组缩减
数组元素相对总容量来说过少(比如只使用了四分之一空间),可进行数组缩减操作,即新建一个更短的数组,并转移元素至新数组,完成数组的变更。