手搓ArrayList源码

public class MyArrayList<E> {
    private int init=2;
    public MyArrayList(){

    }
    public MyArrayList(int init){
        this.init=init;
    }
    //扩容:长度增加
    private double exp=1.5;//扩容因子,每回扩容一个系数
    private int index=0;//下标
    //操作很多Object元素
    public Object[] arr=new Object[init];//开始的数组 length
    //add 1 长度变化 2 赋值
    public boolean add(E da){//开始Object,现换成E ,E也是Object
        grow();//长度加了1
        arr[index++]=da;//刚传入的那个值,给数组最后一位
        return true;
    }
    public void grow(){//长度+1 并让老数组的值拿过来,最后一个值是空的
        if(index==arr.length){
            Object[] newArr=new Object[arr.length+1];
            System.arraycopy(arr,0,newArr,0,arr.length);
            //1 2 3 为了让下一个人取arr,取到最新的
            arr=newArr;
        }
    }
    //得到数组长度
    public int size(){
        return this.index;
    }
    public Object get(int index){//取元素
        if(index<0 || index>=size()){
            throw new ArrayIndexOutOfBoundsException("下标异常");
        }
       return arr[index];
    }
    //修改
    public void set(int index,Object ob){
        if(index<0 || index>=size()){
            throw new ArrayIndexOutOfBoundsException("下标异常");
        }
        arr[index]=ob;//
    }
    //删除
    public void remove(int index){
        if(index<0 || index>=size()){
            throw new ArrayIndexOutOfBoundsException("下标异常");
        }
        for(int i=index;i<arr.length-1;i++){
            arr[i]=arr[i+1];//每个元素向前移动一位
        }
        arr= Arrays.copyOf(arr,arr.length-1);
        //index要更新下
        this.index=this.index-1;
    }
    //toString() ["xx","yy"]

     public String toString(){
         StringBuilder ss=new StringBuilder();
         ss.append("[");
         for(int i=0;i<arr.length;i++){
             if(i==arr.length-1){//如果是最后一位,只有元素,没有,
                 ss.append(arr[i]);
             }else {//其它的,是有元素,也有,
                 ss.append(arr[i]).append(",");
             }
         }
         ss.append("]");
         return ss.toString();
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值