import java.util.Iterator; import java.util.NoSuchElementException; /** * @Auther: FAN * @Date: 2018/9/1 21:41 * @Description: 自定义ArrayList **/ public class MyArrayList<AnyType>{ //默认数组大小 private static final int DEFAULT_CAPACITY = 10; private int theSize; private AnyType[] theItems; //初始化 public MyArrayList(){ doClear(); } public void doClear() { theSize = 0; ensureCapacity(DEFAULT_CAPACITY); } /** * * @return 返回集合元素大小 */ public int size(){ return theSize; } /** * * @return 返回集合元素是否为空 */ public boolean isEmpty(){ return theSize == 0; } public void trimToSize(){ ensureCapacity(size()); } /** * * @param index 角标 * @return 返回角标为index的元素 */ public AnyType get(int index){ if (index < 0 || index > theSize){ throw new ArrayIndexOutOfBoundsException(); } return theItems[index]; } /** * * @param index 需要修改的角标 * @param newAnyType 需要修改的AnyType * @return 返回旧的AnyType */ public AnyType set(int index,AnyType newAnyType){ if (index<0||index>theSize){ throw new ArrayIndexOutOfBoundsException(); } AnyType old = theItems[index]; theItems[index] = newAnyType; return old; } private void ensureCapacity(int newCapatity) { if (newCapatity < theSize){ return; } AnyType[] old = theItems; theItems = (AnyType[]) new Object[newCapatity]; for (int i = 0;i<size();i++){ theItems[i] = old[i]; } } /** * * @param anyType 待添加的元素 * @return 如果anyType添加成功返回true */ public boolean add(AnyType anyType){ add(theSize,anyType); return true; } public void add(int index, AnyType anyType) { if (theItems.length == theSize){ ensureCapacity(theSize*2+1); } for (int i = theSize;i>index;i--){ theItems[i] = theItems[i-1]; } theItems[index] = anyType; theSize++; } public AnyType remove(int index){ if (index<0||index>theSize){ throw new ArrayIndexOutOfBoundsException(); } AnyType removeItem = theItems[index]; for (int i = index;i<theSize-1;i++){ theItems[i] = theItems[i+1]; } theSize--; return removeItem; } public Iterator<AnyType> iterator(){ return new ArrayListIterator(); } private class ArrayListIterator implements Iterator<AnyType>{ private int current = 0; public boolean hasNext() { return current<size(); } public AnyType next() { if (!hasNext()){ throw new NoSuchElementException(); } return theItems[current++]; } public void remove() { MyArrayList.this.remove(--current); } } }