Java 基于数组自定义实现容量可变向量Vector

本文介绍了一种在Java中实现可扩充数组的方法,通过动态调整数组容量以适应不同规模的需求,避免了数组容量固定带来的浪费或崩溃问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组容量N固定。一方面,在向量规模很小时,预留这么多的空间实属浪费;反过来,当向量规模超过N时,即使系统有足够的空间资源,也会因
意外错而崩溃。幸好,有一个简易的方法可以克服这一缺陷。我们希望向量能够根据实际需要,动态地扩充数组的容量。当然, Java 语言本身并不支持这一功能,与多数程序语言一样, Java 中数组的容量都是固定的。我们的策略是,一旦数组空间溢出(即size≥CAPACITY), insertAtRank()方法就会做如下处理:

  1. 开辟一个容量为2N的新数组arrayNew
  2. 将array[]中各元素搬迁至arrayNew[],即arrayNew[i]=array[i], i=0, …, N-1
  3. 将array替换为arrayNew,即令array=arrayNew

此后, insertAtRank()就可以将新元素插入至扩容后的数组了。
实际上,这就是所谓的可扩充数组( Extendable arra y)策略。就像蝉一样,每当生长到足够大时,就会蜕去原来的外壳,换上一身更大的外壳。具体过程如 图 所示。 不必担心原先的数组,它占用的空间将被内存回收器自动回收。

这里写图片描述

代码实现:

@Override
    public void insertAtRank(int position, Object element) throws ExceptionBoundaryExceed{
        if(position < 0 || position > size)
            throw new ExceptionBoundaryExceed("Vector exceed! ");
        if(position >= CAPACITY){//Deal with overflow
            CAPACITY *= 2;
            Object[] arrayNew = new Object[CAPACITY];

            for(int i = 0;i < array.length;i ++)
                arrayNew[i] = array[i];
            array = arrayNew;
        }
        for(int i = size;i > position;i --)
            array[i] = array[i - 1];
        array[position] = element;
        size ++;
        System.out.println("Element you insert is: " + element + " at position: " + position);
    }

该程序基于Java 基于数组自定义实现容量不可变向量Vector实现,其他的源码都一样, 上述代码是VectorBasicOnArray类,insertAtRank方法的修改版。

相关文字借鉴引用 数据结构与算法( Java 描述)邓俊辉 著
源码在github上:https://github.com/gannyee/JavaDataStruct

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值