package com.coding.basic.array; import java.util.Arrays; import com.coding.basic.Iterator; import com.coding.basic.List; public class ArrayList implements List { private int size = 0; private int HALF_MAX_VALUE = Integer.MAX_VALUE; private Object[] elementData = new Object[100]; public void add(Object o) { if (noSpace()) { elementData = grow(); } elementData[size++] = o; } public void add(int index, Object o) { if (index < 0) { throw new IllegalArgumentException("index must be positive integer"); } if (index > size) { throw new IndexOutOfBoundsException("size is" + size); } if (noSpace()) { elementData = grow(); } System.arraycopy(elementData, index, elementData, index + 1, size - index); elementData[size++] = o; } public Object get(int index) { if (index < 0) { throw new IllegalArgumentException("index must be positive integer"); } if (index > (size - 1)) { throw new IndexOutOfBoundsException("size is" + size); } return elementData[index]; } public Object remove(int index) { if (index < 0) { throw new IllegalArgumentException("index must be positive integer"); } if (index > (size - 1)) { throw new IndexOutOfBoundsException("size is" + size); } Object obj = elementData[index]; System.arraycopy(elementData, index + 1, elementData, index, size - index); elementData[size-1] = null; size--; return obj; } public int size() { return size; } public Iterator iterator() { return null; } private boolean noSpace() { return size == elementData.length; } private Object[] grow() { int newSize; if (size < HALF_MAX_VALUE) { newSize = size * 2; } else { newSize = Integer.MAX_VALUE; } return Arrays.copyOf(elementData, newSize); } }