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(); } }
手搓ArrayList源码
最新推荐文章于 2024-10-16 10:13:45 发布