java ArrayList 底层详细
package cn.com.test04; import java.util.ArrayList; import java.util.Arrays; class MyArrayList<T>{ private Object[] obj; private int size=0; MyArrayList(){ this.obj= new Object[10];//this(10); } MyArrayList(int length){ this.obj= new Object[length]; } public void add(T o){ automaticAdd();//判断数组是否需要增长 this.obj[size]=o; size++; } public void add(int index,T o){ automaticAdd(); System.arraycopy(obj, index, obj, index+1, size-index); this.obj[index]=o; size++; } public T get(int index){ if(index<0||index>=size){ // System.err.print("位置不对"); throw new IndexOutOfBoundsException( "Index: "+index+", Size: "+size); } return (T)obj[index]; } public int size(){ return this.size; } private void automaticAdd(){ if(size>=obj.length*0.75){ Object[] o=new Object[(int) (obj.length*1.5)]; System.arraycopy(obj, 0, o, 0, size); obj=o; } } public void update(int index,T o){ if(index<0||index>=size){ // System.err.print("位置不对"); throw new IndexOutOfBoundsException( "Index: "+index+", Size: "+size); } obj[index]=o; } public T remove(int index){ if(index<0||index>=size){ throw new IndexOutOfBoundsException( "Index: "+index+", Size: "+size); } automaticRemove(); T t=(T)obj[index]; System.arraycopy(obj, index+1, obj, index, size-index-1); size--; return t; } private void automaticRemove(){ if(size<=obj.length*0.7){ Object[] o=new Object[(int) (obj.length*0.75)]; System.arraycopy(obj, 0, o, 0, size); obj=o; } } public int indexOf(T o){ for(int i=0;i<size();i++){ if((T)obj[i]==o){ return i; } } return -1; } public T[] toArray(){ Object[] sss = Arrays.copyOf(obj, size); return (T[])sss; } } public class t03 { public static void main(String[] args) { ArrayList<String> l= new ArrayList<String>();// 底层用数组实现 查询 修改 方便 指定位置增加 删除效率低下 l.add("aa");l.add("bbb"); l.add("aa"); System.out.println(l.size()); l.add("bbb"); l.add("aa");l.add("bbb"); l.add("aa");l.add(2,"aa"); System.out.println(l.remove(1)+"==========="); ; System.out.println(l.indexOf("bbb")+"--------------"); //l.update(0, "llllllllllllllll"); Object[] sad = l.toArray(); for(int i=0;i<sad.length;i++){ System.out.println("++"+sad[i]); } // t03.show(l); } public static void show(MyArrayList l){ for(int i=0;i<l.size();i++){ System.out.println(l.get(i)); } } }