package com.coding.basic; import java.util.Arrays; import java.util.NoSuchElementException; public class ArrayList implements List { private static final int DEFAULT_CAPACITY = 100; private int size = 0; private Object[] elementData = new Object[DEFAULT_CAPACITY]; public void add(Object o){ ensureCapacity(size+1); elementData[size] = o; size++; } public void add(int index, Object o){ if (index > size || index < 0) { throw new ArrayIndexOutOfBoundsException(); } ensureCapacity(size+1); for (int i = size;i>index;i--) { elementData[i] = elementData[i - 1]; } elementData[index] = o; size++; } public Object get(int index){ if (index > size || index < 0) { throw new ArrayIndexOutOfBoundsException(); } return elementData[index]; } public Object remove(int index){ Object[] removeData = (Object[]) elementData[index]; for (int i =index;i<size()-1;i++) { elementData[i] = elementData[i + 1]; } elementData[size] = null; size--; return removeData; } public int size(){ return size; } public Iterator iterator(){ return new ArrayListIterator(); } private class ArrayListIterator implements Iterator { private int current = 0; @Override public boolean hasNext() { return current<size(); } @Override public Object next() { if (!hasNext()) { throw new NoSuchElementException(); } return elementData[current++]; } } public void ensureCapacity(int minCapacity) { if (minCapacity < elementData.length) { return; } else if (minCapacity > elementData.length) { elementData = Arrays.copyOf(elementData, minCapacity + DEFAULT_CAPACITY); } } }