package net.coding.basic; import java.util.Arrays; public class ArrayList implements List { private int size = 0; private Object[] elementData = new Object[10]; // 每次乘2增长 private void grow() { elementData = Arrays.copyOf(elementData, elementData.length * 2); } public void add(Object o){ if (size >= elementData.length) { this.grow(); } elementData[size++] = o; } public void add(int index, Object o){ if (size >= elementData.length) { this.grow(); } System.arraycopy(elementData, index, elementData, index + 1, size - index); elementData[index] = o; size++; } public Object get(int index){ if (index >= size) { throw new IndexOutOfBoundsException(); } return elementData[index]; } public Object remove(int index){ if (index >= size) { throw new IndexOutOfBoundsException(); } Object el = elementData[index]; System.arraycopy(elementData, index + 1, elementData, index, size - index - 1); size--; return el; } public int size(){ return size; } private class ArrIter implements Iterator { int cursor = 0; @Override public boolean hasNext() { return cursor < size; } @Override public Object next() { return elementData[cursor++]; } } public Iterator iterator(){ return new ArrIter(); } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("["); for (int i = 0; i < size; i++) { sb.append(elementData[i]); if (i < size - 1) { sb.append(","); } } sb.append("]"); return sb.toString(); } }