前置 数组设定好长度后在运行过程中无法更改,则设计自动扩容部分令数组添加更多数据
一. 手动扩容
设置更大容量新数组并将原数组数据移入新数组中
int[] arr1=new int[5];
for(int i=0;i<5;i++)
{arr[i]=i}
此时原数组数据容量为5。
2. 设置新数组
int[] arr2=new int[10];
新数组数据容量为10。
3. 将原数组数据移入新数组中
for (int i=0;i<5;i++)
{arr2[i]=arr1[i];}
4.在新数组中添加新元素
for (int i=5;i<arr2.length;i++){
arr2[i]=i;
}
5.打印此时新数组中所有元素
for (int i=0;i<arr2.length;i++){
System.out.print(arr2[i]+"");
}
则此时打印结果为原数组数据+新数组中新存储数据
二. 自动扩容
当原数组长度过短时可以实现数组自动扩容满足需求
//定义所需元素
Object[] values;
int size;//作为数据下标
int length;
static final int ce=10;//加入限定的数据
1.进行数组的初始化得到空数组
public arr1(){
length=ce;
values =new Object[length];
size=0;
}
2.开发者自定义输入数据名称(初始输入数据长度不小于2)
public arr1(int celength){
if (celength<2){
System.out.println("初始长度过短");
length=ce;
values =new Object[celength];
size=0;
}else {
length=celength;
values =new Object[celength];
size=0;
}
}
3.实现数组自动扩容
public void add(Object e){
if (size==length){
int newlength=(length/2)+length;
Object[] values2=new Object[newlength];
for (int i=0;i<length;i++){
values2[i]=values[i];
}
values=values2;
length=newlength;
System.out.println("数组扩容完成,长度为"+length);
}
values[size]=e;
size++;
}
此时代码中(length/2)+length意为将数组长度扩大到原来的1.5倍
且“/”可用“向右位移一位“<<1”代替,即0.5倍
4.在自动扩容完的数组中存入数据,数组会自动根据选择的扩容倍数修改自身长度并存储数据
public static void main(String[] args) {
arr1<String> a=new arr1<>(10);
a.add("hello");
for (int i=19;i<100;i++){
a.add("hello"+i);
}
则最终数组会扩容到109位之后停止扩容,修改存入数组的数据量可以改变数组扩容的执行次数