public E remove(int index){//1.rangeCheck会判断index是否越界rangeCheck(index);
modCount++;
E oldValue =elementData(index);int numMoved = size - index -1;if(numMoved >0)
System.arraycopy(elementData, index+1, elementData, index,numMoved);
elementData[--size]= null;// clear to let GC do its workreturn oldValue;}publicbooleanremove(Object o){if(o == null){for(int index =0; index < size; index++)if(elementData[index]== null){fastRemove(index);returntrue;}}else{for(int index =0; index < size; index++)if(o.equals(elementData[index])){fastRemove(index);returntrue;}}returnfalse;}
3.3 修改元素
根据下标修改元素很快,直接通过index定位
public E set(int index, E element){rangeCheck(index);
E oldValue =elementData(index);
elementData[index]= element;return oldValue;}
3.4 查询元素
根据index查询元素速度很快,复杂度为:O(1)
根据value查询元素需要遍历数组,复杂度为:O(N)
lastIndexOf查询value的时候就是从数组末尾开始查询
public E get(int index){rangeCheck(index);returnelementData(index);}publicintindexOf(Object o){if(o == null){for(int i =0; i < size; i++)if(elementData[i]==null)return i;}else{for(int i =0; i < size; i++)if(o.equals(elementData[i]))return i;}return-1;}publicintlastIndexOf(Object o){if(o == null){for(int i = size-1; i >=0; i--)if(elementData[i]==null)return i;}else{for(int i = size-1; i >=0; i--)if(o.equals(elementData[i]))return i;}return-1;}
publicintsize(){return size;}publicbooleanisEmpty(){return size ==0;}publicbooleancontains(Object o){returnindexOf(o)>=0;}publicvoidclear(){
modCount++;// clear to let GC do its workfor(int i =0; i < size; i++)
elementData[i]= null;
size =0;}
toArray:将ArrayList转换为数组并返回
public Object[]toArray(){return Arrays.copyOf(elementData, size);}