package com.coding.basic; public class ArrayList implements List { private int size; // ArrayList 中的实际元素个数 private Object[] elementData; public ArrayList() { size = 0; elementData = new Object[100]; } public void add(Object o){ if (size >= elementData.length) { elementData = Array.grow(elementData, 100); } elementData[size++] = o; } public void add(int index, Object o){ if (size >= elementData.length) { elementData = Array.grow(elementData, 100); } if (index > size || index < 0) throw new ArrayIndexOutOfBoundsException(); System.arraycopy(elementData, index, elementData, index + 1, size - index); elementData[index] = o; size++; } public Object get(int index){ if (index > size) throw new ArrayIndexOutOfBoundsException(); return elementData[index]; } public Object remove(int index){ if (index >= size || index < 0) throw new ArrayIndexOutOfBoundsException(); Object result = elementData[index]; System.arraycopy(elementData, index + 1, elementData, index, size - index - 1); elementData[--size] = null; return result; } public int size() { return size; } public Iterator iterator(){ return new Iterator() { private int next = 0; // 下一个返回元素所在的位置 public boolean hasNext() { return next < size; } public Object next() { if (!hasNext()) throw new ArrayIndexOutOfBoundsException(); return elementData[next++]; } public Object remove() { if (next <= 0) throw new IllegalStateException(); return ArrayList.this.remove(--next); } }; } }