package dataStructure; /** * Created by zj on 2017/2/20. */ public class ArrayList implements List { private int size = 0; private Object[] elementData = new Object[100]; public void add(Object o) { if (size > elementData.length / 2) { elementData = grow(elementData); } elementData[size] = o; size++; } private Object[] grow(Object[] datas) { Object[] elementDataNew = new Object[elementData.length + elementData.length / 4]; System.arraycopy(datas, 0, elementDataNew, 0, size); return elementDataNew; } public void add(int index, Object o) { if (index <0 || index > size - 1) { throw new IndexOutOfBoundsException("index out of bound"); } if (size > elementData.length / 2) { elementData = grow(elementData); } for (int i = size - 1; i >= index; i--) { elementData[i + 1] = elementData[i]; } elementData[index] = o; size++; } public Object get(int index) { if (index <0 || index > size - 1) { throw new IndexOutOfBoundsException("index out of bound"); } return elementData[index]; } public Object remove(int index) { if (index <0 || index > size - 1) { throw new IndexOutOfBoundsException("index out of bound"); } for (int i = index; i <= size - 1; i++) { elementData[i] = elementData[i + 1]; } elementData[size - 1] = null; size--; return null; } public int size() { return size; } public Iterator iterator() { return new ArrayListInterator(); } private class ArrayListInterator implements Iterator { private int nowIndex = 0; public boolean hasNext() { if (nowIndex <= size - 1) { return true; } return false; } public Object next() { return elementData[nowIndex++]; } } }