实现一个支持动态扩容的集合

package cm.com.datastructure.array;

/**
 * 支持动态扩容的数组
 * 初始容量为8 每次扩容2倍
 *
 * @author MemorysLiu
 * @version 1.0.0
 * @date 2019-07-29 18:53
 */
public final class Array<T> {

    private static final int init_size = 8; //设定初始大小

    private Object [] objectArray;  //存放值的数组

    private int size;


    public Array(){
        objectArray = new Object [init_size];
    }

    Array(int size){
        if (size <= 0){
            throw new RuntimeException("数组大小不能小于等于0");
        }
        if (size <= 8){
            size = init_size;
        }
        objectArray = new Object [size];
    }

    private void setSize(int size){
        if (size <= 0){
            throw new RuntimeException("数组大小不能小于等于0");
        }
        if (size < objectArray.length){
            throw new RuntimeException("数组大小不能小于原数组");
        }
        if (size == objectArray.length){
            return;
        }
        Object [] array = new Object[size];
        for (int i = 0; i < objectArray.length; i++) {
            Object o = objectArray[i];
            array[i] = o;
        }
        objectArray = array;
    }

    public T get(int index){
        if (index < 0 || index > size){
            throw new RuntimeException("数组角标越界");
        }
        return (T)objectArray[index];
    }

    public void add(T t){
        if (this.size > objectArray.length){
            throw new RuntimeException("出大问题了");
        }
        if (this.size == objectArray.length){
            setSize(2 * objectArray.length);
        }
        objectArray[size++] = t;
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值