欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数组手动实现ArrayList

程序员文章站 2022-06-09 16:57:57
...
public class ArrayListDemo {
    private static final int DEFAULT_LENGTH = 10;
    private Object[] datas;
    private int size;
    
    public ArrayListDemo() {
        super();
        this.datas = new Object[DEFAULT_LENGTH];
    }
    
    public int size(){
        return size;
    }
    
    public void add(Object obj){
        resizeLength(size+1);
        datas[size++] = obj;
    }

    private void resizeLength(int minLength) {
        if(minLength - datas.length>0){
            datas = Arrays.copyOf(datas, 10);
        }
    }
    
    public Object get(int index){
        //校验是否越界
        return datas[index];
    }
    
    /**
     * arraycopy(Object src, int srcPos,
           Object dest, int destPos, int length)
        src:源数组;    srcPos:源数组要复制的起始位置;
        dest:目的数组;  destPos:目的数组放置的起始位置;length:复制的长度。
     * @param index
     * @return
     */
    public Object remove(int index){
        //校验越界
        Object oldValue = datas[index];
        int moved = size - index - 1;//这个元素后面有多少元素
        if (moved > 0)
            System.arraycopy(datas, index+1, datas, index, moved);//把后面的元素统一往前移
        datas[--size] = null;//把对象的引用去掉,对象回收
        return oldValue;
    }
    
    public int indexOf(Object obj){
        if(obj == null){
            for(int i=0;i<size;i++){
                if(datas[i]==null)
                    return i; 
            }
        }else{
            for(int i=0;i<size;i++){
                if(datas[i].equals(obj))
                    return i;
            }
        }
        return -1;
    }
}

转载于:https://www.jianshu.com/p/d6c14467cb6e