package com.coding.basic.datastructure.array; import com.coding.basic.datastructure.Iterator; import com.coding.basic.datastructure.List; /** * Created by zt on 2017/2/19. */ public class ArrayList implements List { private static final int DEFAULT_CAPACITY = 10; private int size = 0; private Object[] elementData = null; public ArrayList() { elementData = new Object[DEFAULT_CAPACITY]; } public ArrayList(int initialCapacity) { if (initialCapacity < 0) { throw new RuntimeException("initialCapacity is smaller than zero"); } elementData = new Object[initialCapacity]; } @Override public void add(Object o) { checkCapacity(size + 1); elementData[size] = o; size++; } @Override public void add(int index, Object o) { checkCapacity(size + 1); System.arraycopy(elementData, index, elementData, index + 1, size - index); elementData[index] = o; size++; } @Override public Object get(int index) { checkRange(index); return elementData[index]; } @Override public Object remove(int index) { Object removedObject = elementData[index]; System.arraycopy(elementData, index + 1, elementData, index, elementData.length - index - 1); elementData[--size] = null; return removedObject; } @Override public int size() { return size; } private void checkRange(int index) { if (index < 0 || index >= size) { throw new IndexOutOfBoundsException(); } } private void checkCapacity(int size) { if (size > elementData.length) { int newLength = elementData.length * 2; Object[] newObject = new Object[newLength]; System.arraycopy(elementData, 0, newObject, 0, elementData.length); elementData = newObject; } } public Iterator iterator() { return new ArrayListIterator(this); } private class ArrayListIterator implements Iterator { private ArrayList arrayList = null; private int position = 0; private ArrayListIterator(ArrayList arrayList) { this.arrayList = arrayList; } @Override public boolean hasNext() { return position < size(); } @Override public Object next() { return get(position++); } @Override public Object remove() { // TODO return this.arrayList.remove(position--); } } }