package week1.collections; import java.util.Arrays; public class ArrayList implements List { private int size = 0; //声明数组长度 private Object[] elementData = new Object[0]; //声明一个Object数组,初始大小为10 /** * 将元素添加到末尾 */ public boolean add(Object o){ ensureCapacity(size+1); elementData[size] = o; size++; return true; } /** * 将元素插入到index位置 */ public void add(int index, Object o){ exception(index); ensureCapacity(size+1); System.arraycopy(elementData, index, elementData, index+1, size-index); elementData[index] = o; size++; } /** * 获得index位置的元素 */ public Object get(int index){ exception(index); return elementData[index]; } /** * 删除index位置的元素并返回 */ public Object remove(int index){ exception(index); Object o = elementData[index]; System.arraycopy(elementData, index+1, elementData, index, size-index-1); size--; return o; } private void exception(int index) { if(index > size || index < 0){ throw new ArrayIndexOutOfBoundsException("index"+index+"越界"); } } /** * 获取元素个数 */ public int size(){ return size; } /** * 获取迭代器 * @return */ public Iterator iterator(){ return new ArrayListIterator(); } private class ArrayListIterator implements Iterator{ int pos = 0; @Override public boolean hasNext() { return pos<size(); } @Override public Object next() { int newPos = pos; pos++; return elementData[newPos]; } } /** * 自动扩容 * @param minCapacity */ public void ensureCapacity(int minCapacity){ if(minCapacity > elementData.length){ int newCapacity = Math.max(minCapacity, elementData.length*2); elementData = Arrays.copyOf(elementData, newCapacity); } } }