简单的用数组实现一个List集合原理

实现ArreyList的底层

思维导图add()方法的实现原理
add()的思维导图主要需要知道ArrayList集合就是一个可以自动扩大范围的Object数组!! =.=

import java.util.Arrays;
public class TTList {
    //声明一个默认的变量为10;
    private int DEFAULT_CAPACITY = 10 ;
    //声明一个空的主要数组
    private Object TT [];
    //声明一个空的对比数组
    private Object DEFAULTCAPACITY [] = {};
    //设置一个默认的长度为0
    private  int tTLong = 0;
    //声明索引位置
    private int size = 0;

    /**
     * 无参构造方法
     */
    public TTList(){
        this.TT = DEFAULTCAPACITY;
    }

    /**
     * 添加集合方法
     * @return
     */
    public Boolean add(Object e){
        //判断TT集合是不是第一次添加信息
        if(TT == DEFAULTCAPACITY){
            //改变默认长度为10
            tTLong = DEFAULT_CAPACITY;
        }else {
            //否则等于当前的添加的集合索引
            tTLong = size + 1;
        }

        //判断默认长度是不是大于TT数组的长度
        if(tTLong - TT.length > 0){
            //调用扩容方法
            grow(tTLong);
        }
        //在数组中的索引下标赋值传入的参数Object
        TT [size ++] = e;
        //返回判断是否添加
        return true;
    }

    /**
     * 添加数组长度
     * @param tTLong
     */
    private void grow(int tTLong) {
        //旧的数组长度
        int oldCapacity = TT.length;
        //新的数组长度
        int newCapacity = oldCapacity + (oldCapacity >> 1);

        //判断新的长度是否大于第一次赋值的长度10
        if(newCapacity - tTLong < 0){
            newCapacity = tTLong;
        }

        //将新的长度的数组重新赋值给TT数组
        TT = Arrays.copyOf(TT,newCapacity);
    }
    /**
     *指定索引的add()方法
     */
    public Boolean add(Object obj, int index){
        TT [index] = obj;
        return true;
    }
    /**
     * 获取到集合的长度
     * @return
     */
    public int size(){
        return size;
    }

    /**
     * 获取指定索引的值
     * @param index
     * @return
     */
    public Object get(int index){
        return TT[index];
    }
}

注意
这个实现List集合原理相对来说比较好理解,但是也有不少不足的地方,比如简化代码的同时也降低了一些稳定性,使得使用这种类的容易出一些安全问题,不过可以在需要修改的前提下可以为所欲为的修改。ヾ(•ω•`)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值