package com.coding.basic; public class ArrayList implements List{ private int size = 0; private Object[] elementData; public ArrayList(int size) { this.elementData = new Object[size]; } public ArrayList() { this.elementData = new Object[10]; } public void add(Object o) { if(isFull()) resize(); elementData[size++] = o; } public void add(int index, Object o) { rangeCheckForAdd(index); System.arraycopy(elementData, index, elementData, index + 1, size - index); elementData[index] = o; size++; } public Object get(int index) { rangeCheckForAdd(index); return elementData[index]; } public Object remove(int index) { rangeCheckForAdd(index); Object o = elementData[index]; System.arraycopy(elementData, index + 1, elementData, index, size - index); elementData[--size] = null; return o; } public int size() { return elementData.length; } public com.coding.basic.Iterator iterator() { return new Itr(); } private class Itr implements com.coding.basic.Iterator { int cursor; @Override public boolean hasNext() { return cursor != size; } @Override public Object next() { int i = cursor; if (i < elementData.length) { cursor = i + 1; return elementData[i]; } return null; } } //檢查下表越界 public void rangeCheckForAdd(int index) { if (index < 0 || index > size) throw new IndexOutOfBoundsException("下标越界"); } //数组是否满 public boolean isFull(){ return size == elementData.length; } //扩容 public void resize(){ Object[] newElementData = new Object[elementData.length * 2]; System.arraycopy(elementData, 0, newElementData, 0, size); this.elementData = newElementData; newElementData = null; } // public boolean isEmpty() { return size == 0; } }