手写一个简单的ArrayList

  • 定义接口
package com.lzq.ArrayList;

public interface List<E> {
    //获取实际储存内容的大小
    int size();
    //判断数组实际储存内容是否为空
    boolean isEmpty();
    //往数组中添加内容
    void add(E e);
    //取数据
    E get(int index);
    //删除
    boolean remove(int index);
}
  • 定义实现类
package com.lzq.ArrayList;

public class ArrayList<E> implements List<E>{
    //定义ArrayList的初始容量大小
    private static int DEFAULT_CAPACITY = 2;
    //定义实际储存了多少
    private int size;
    //定义储存的数组
    private Object[] elementData;

    //无参构造函数,数组默认初始化长度为10
    public ArrayList() {
        elementData = new Object[10];
    }
    //有参构造函数,可以定义数组的大小
    public ArrayList(int length) {
        elementData = new Object[length];
    }

    //获取实际储存内容的大小
    public int size() {
        return size;
    }

    //判断数组实际储存内容是否为空
    public boolean isEmpty() {
        return size == 0;
    }

    //往数组中添加内容
    public void add(E e) {
        //验证数组是否已经满了,如果满了那么就扩容
        if((size + 1) >elementData.length){
            int oldLength = elementData.length;
            int newLength = oldLength * 2;
            Object[] elementDate_temp = new Object[newLength];
            //把数据复制到临时数组
            for(int i = 0; i < oldLength; i++){
                elementDate_temp[i] = elementData[i];
            }
            elementData = elementDate_temp;
        }
        //把内容放到数组,并且size+1
        elementData[size++] = e;
    }

    //取数据
    public E get(int index) {
        if(index < 0 || index >= elementData.length){
            throw new RuntimeException("索引不合法!!!!");
        }
        return (E)elementData[index];
    }

    //删除元素
    public boolean remove(int index) {
        //验证索引是否合法
        if(index < 0 || index >= size){
            throw new RuntimeException("索引不合法!!!!");
        }
        //把改元素置空如果size == elementData.length && index ==size - 1 那么最后一个元素不能被他后面的元素覆盖
        elementData[index] = null;
        //数组元素逐个往前移动
        for(int i = (index + 1); i < size; i ++){
            elementData[i - 1] = elementData[i];
        }
        size --;
        return true;
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值