package com.coding.basic; import java.util.Arrays; public class ArrayList implements List { private int size = 0; private Object[] elementData = new Object[100]; public void add(Object o){ if(size < elementData.length){ elementData[size] = o; }else{ Object[] newElementData = new Object[elementData.length + elementData.length/2]; System.arraycopy(elementData, 0, newElementData, 0, size); newElementData[size] = o; this.elementData = newElementData; } size++; } public void add(int index, Object o){ if(index >= 0 && index <= size){ //1.不扩容 if(index == size - 1){ //1.1 加在最后 elementData[index] = o; }else{ //1.2 加在前面 //index的位置的数值变为改对象,index以后位置的都往后挪一位 Object[] newElementData = new Object[elementData.length]; System.arraycopy(elementData, 0, newElementData, 0, index); newElementData[index] = o ; System.arraycopy(elementData, index, newElementData, index + 1, size - index); this.elementData = newElementData; } size++; }else{ throw new IndexOutOfBoundsException(); } } public Object get(int index){ if(index < size){ return elementData[index]; }else{ throw new IndexOutOfBoundsException(); } } public Object remove(int index){ if(index < size){ Object obj = elementData[index]; Object[] newElementData = new Object[elementData.length]; if(size != 1){ //1.若集合长度为1 if(0 == index){ //1.1.如果remove的是0索引的 System.arraycopy(elementData, 1, newElementData, 0, size - 1); }else if(index == size -1){ //1.2.如果remove的是最后索引的 System.arraycopy(elementData, 0, newElementData, 0, size - 1); }else{ //1.3.在中间 System.arraycopy(elementData, 0, newElementData, 0, index); System.arraycopy(elementData, index + 1, newElementData, index, size - index - 1); } } this.elementData = newElementData; size--; return obj; }else{ throw new IndexOutOfBoundsException(); } } public int size(){ return size; } public Iterator iterator(){ return null; } @Override public String toString() { return "ArrayList [size=" + size + ", elementData=" + Arrays.toString(elementData) + "]"; } }