package cn.net.pikachu.basic; import java.util.Arrays; public class ArrayList implements List { private int size = 0; private Object[] elementData = new Object[100]; private class Itr implements Iterator { private int curIndex = 0; @Override public boolean hasNext() { return curIndex < size; } @Override public Object next() { return elementData[curIndex++]; } } public void add(Object o) { if (size == elementData.length) { grow(); } elementData[size++] = o; } private void grow() { if (elementData.length < 2048) { Arrays.copyOf(elementData, elementData.length * 2); } else { Arrays.copyOf(elementData, elementData.length + 1024); } } public void add(int index, Object o) { if (index > size || index < 0) { throw new IndexOutOfBoundsException(String.valueOf(index)); } else if (index == size) { add(o); } else { if (size == elementData.length) { grow(); } for (int i = size; i >= index; i--) { elementData[i + 1] = elementData[i]; } elementData[index] = o; } size++; } public Object get(int index) { if (index >= size || index < 0) { throw new IndexOutOfBoundsException(String.valueOf(index)); } return elementData[index]; } public Object remove(int index) { if (index >= size || index < 0) { throw new IndexOutOfBoundsException(String.valueOf(index)); } Object o = elementData[index]; System.arraycopy(elementData, index + 1, elementData, index, size - index); size--; return o; } public int size() { return size; } // 迭代器留在后面写 public Iterator iterator() { return new Itr(); } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("["); for (int i = 0; i < size - 1; i++) { builder.append(elementData[i]).append(","); } if (size > 0) { builder.append(elementData[size - 1]); } builder.append("]"); return builder.toString(); } }