JAVA实现一个ArrayList

public class MyArrayList {


    private Object[] data;//Object类型的数组
    private int size;//数组内的元素个数

    public MyArrayList(int capacity) {
        data = new Object[capacity];//初始化
    }

    public int size() {
        return size;
    }

    public MyArrayList() {
        this(4);//初始容量为10
    }


    public void add(Object obj) {
        data[size++] = obj;
        //如果元素满了,进行扩容
        expandCapacity();
    }

    //
    public Object get(int index) {
        validateIndex(index);
        return data[index];
    }


    public void remove(int index) {
        validateIndex(index);
        //当前元素的[index+1...]挪到[index...]
        int target = size - index - 1;
        if (target > 0) {
            System.arraycopy(data, index + 1, data, index, target);
            data[--size] = null;
        }
    }


    public void remove(Object obj) {
        for (int i = 0; i < size; i++) {
            if (get(i).equals(obj)) {
                remove(i);
                data[--size] = null;
            }
        }

    }


    private void validateIndex(int index) {
        if (index < 0 || index > size) {
            throw new RuntimeException("out of index");
        }
    }

    public void add(int index, Object obj) {
        validateIndex(index);
        expandCapacity();
        //[index...] 挪到 [index+1...] 共size-index个元素
        System.arraycopy(data, index, data, index + 1, size - index);
        data[index] = obj;
        size++;
    }


    private void expandCapacity() {
        if (size == data.length) {
            //创建一个新的数组,将老数组的元素拷贝到新数组,新数组赋给老数组
            Object[] tmp = new Object[2 * size + 1];
            System.arraycopy(data, 0, tmp, 0, data.length);
            data = tmp;
        }
    }


    public static void main(String[] args) {
        MyArrayList list = new MyArrayList();
        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");
        list.add("E");
        list.remove(2);
        list.add("F");


    }


}

Last updated