java用数组实现ArrayList

java用数组实现ArrayList

  • ArrayList继承自AbstractList,实现了List接口,同时还实现了RandomAccess、Cloneable、Serialzable接口,所以ArrayList支持快读访问、复制、序列化,底层基于数组实现、容量大小动态变化
    public class MyArrayList<E> {
    /**
     * 默认容量
     */
    private static  final  int DEFAULT_CAPACITY = 10;

    /**
     * 集合中元素个数
     */
    private int size;

    /**
     * 存储集合中元素
     */
    private Object[] elementData;

    /**
     * 如果有初始化容量的时候,就会使用这个对象来初始化
     */
    private Object[] EMPTY_ELEMENT_DATA = {};


    /**
     * 如果使用默认的构造函数的话,就会使用这个对象初始化
     */
    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

    /**
     * 集合最大长度
     */
    private int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

    public MyArrayList(){
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
    }

    public MyArrayList(int initialCapacity){
        if(initialCapacity>0){
            this.elementData = new Object[initialCapacity];
        }else if(initialCapacity==0){
            this.elementData = EMPTY_ELEMENT_DATA;
        }else {
            throw new IllegalArgumentException();
        }
    }
    public int size(){
        return this.size;
    }

    public boolean isEmpty(){
        return this.size==0;
    }

    public boolean add(E e) {
        int minCapacity = size+1;
        if(this.elementData==DEFAULTCAPACITY_EMPTY_ELEMENTDATA){
            minCapacity = Math.max(minCapacity,DEFAULT_CAPACITY);
        }
        if(minCapacity - this.elementData.length>0){
            grow(minCapacity);
        }
        elementData[size++] = e;
        return true;
    }

    public void grow(int minCapacity){
        int oldCapacity = this.elementData.length;
        int newCapacity = oldCapacity+(oldCapacity>>1);
        if(newCapacity-minCapacity<0){
            newCapacity = minCapacity;
        }
        if (newCapacity - MAX_ARRAY_SIZE > 0){
            newCapacity = MAX_ARRAY_SIZE;
        }
        this.elementData = Arrays.copyOf(this.elementData,newCapacity);
    }

    public E get(int index){
        rangeCheck(index);
        return  null;
    }

    private void rangeCheck(int index) {
        if (index >= size)
            throw new IndexOutOfBoundsException();
    }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值