package com.ace.coding; import java.util.Arrays; public class ArrayList implements List { private int size = 0; private Object[] elementData = new Object[100]; public void add(Object o){ checkArrayLength(); elementData[size++] = o; } private void checkArrayLength(){ if(elementData.length < size() + 1){ // expand the origin length of the array int newLength = size * 2 + 1; elementData = Arrays.copyOf(elementData, newLength); } } private void checkIndex(int index){ if(index < 0 || index >= size()){ throw new IndexOutOfBoundsException("Index " + index + " is invalid."); } } public void add(int index, Object o){ checkIndex(index); checkArrayLength(); System.arraycopy(elementData, index, elementData, index+1, size() - index); elementData[index] = o; size++; } public Object get(int index){ checkIndex(index); return elementData[index]; } public Object remove(int index){ checkIndex(index); Object obj = elementData[index]; if(index == size() - 1){ elementData[index] = null; } else { System.arraycopy(elementData, index + 1, elementData, index, size() - index - 1); } size--; return obj; } public int size(){ return size; } public boolean contains(Object o){ for (int i = 0; i < elementData.length; i++) { if(elementData[i] == o){ return true; } } return false; } public Iterator iterator(){ return null; // return new ListIterator(); } public int[] listToArray(ArrayList arrayList){ int[] newArray = new int[arrayList.size()]; for (int k = 0; k < newArray.length; k++) { newArray[k] = (int)arrayList.get(k); } return newArray; } /*private class ListIterator implements Iterator{ private int index = 0; @Override public boolean hasNext() { // TODO Auto-generated method stub return index != size; } @Override public Object next() { // TODO Auto-generated method stub if(index >= size){ throw new IndexOutOfBoundsException("There's no next element."); } return elementData[index++]; } }*/ }