package com.github.miniyk2012.coding2017.basic; import java.util.Arrays; public class ArrayList implements List { private int size = 0; private int DEFAULT_LENGTH = 10; private Object[] elementData = new Object[DEFAULT_LENGTH]; public void add(Object o){ ensureCapcacity(); elementData[size++] = o; } public void add(int index, Object o){ ensurnPosition(index); ensureCapcacity(); System.arraycopy(elementData, index, elementData, index + 1, size - index); elementData[index] = o; size++; } public Object get(int index){ ensureIndex(index); return elementData[index]; } public Object remove(int index){ ensureIndex(index); Object temp = elementData[index]; System.arraycopy(elementData, index+1, elementData, index, size - index - 1); elementData[size-1] = null; size--; return temp; } public void clear() { elementData = new Object[DEFAULT_LENGTH]; size = 0; } public int size(){ return size; } public Iterator iterator(){ Iterator iterator = new IteratorImp(this); return iterator; } private void ensureCapcacity() { int oldLength = elementData.length; if (size+1 > oldLength) { elementData = Arrays.copyOf(elementData, 2*oldLength); } } private void ensureIndex(int index) { if (index >= size || index < 0) throw new ArrayIndexOutOfBoundsException(String.format("index %d out of bounds [0-%d)", index, size)); } private void ensurnPosition(int index) { if (index <0 || index>size) throw new ArrayIndexOutOfBoundsException(String.format("position %d out of position [0-%d)", index, size)); } @Override public String toString() { Object[] tempArray = Arrays.copyOf(elementData, size); return Arrays.toString(tempArray); } }