Java 数组的自动扩容

前置   数组设定好长度后在运行过程中无法更改,则设计自动扩容部分令数组添加更多数据

一. 手动扩容

设置更大容量新数组并将原数组数据移入新数组中

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位之后停止扩容,修改存入数组的数据量可以改变数组扩容的执行次数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值