美文网首页
数组手动实现ArrayList

数组手动实现ArrayList

作者: feiyingmm | 来源:发表于2018-03-07 16:11 被阅读0次
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;
    }
}

相关文章

网友评论

      本文标题:数组手动实现ArrayList

      本文链接:https://www.haomeiwen.com/subject/hyojfftx.html