package com.coding.basic; public class ArrayList implements List { private int size = 0; private Object[] elementData = new Object[5]; public void add(Object o) { dilatation(); size = size + 1; elementData[size - 1] = o; } public void add(int index, Object o) { //是否超出目前大小+1; //是否需要先扩容 //移动数组 checkRange(index); dilatation(); //手动移动素组 for (int i = size; i >= index; i--) { Object o1 = elementData[i]; elementData[i + 1] = elementData[i]; } elementData[index] = o; size = size + 1; } private String outOfBoundsMsg(int index) { return "Index: " + index + ", Size: " + size; } public Object get(int index) { checkRange(index); return elementData[index]; } public Object remove(int index) { checkRange(index); Object object = elementData[index]; //native 方法,未知细节 System.arraycopy(elementData, index + 1, elementData, index, size - index); size = size - 1; elementData[size] = null; return object; } @Override public int size() { return this.size; } public void checkRange(int index) { if (index >= size) { throw new IndexOutOfBoundsException(outOfBoundsMsg(index)); } } public void dilatation() { if (elementData.length == size + 1) { Object[] tempElementData = elementData; elementData = new Object[elementData.length * 2]; for (int i = 0; i < tempElementData.length; i++) { elementData[i] = tempElementData[i]; } } } @Override public String toString() { StringBuilder value = new StringBuilder(); for (int i = 0; i < size; i++) { Object object = elementData[i]; value.append(object.toString() + ","); } return value.toString(); } Iterator mIterator = new MIterator(); public Iterator iterator() { return mIterator; } class MIterator implements Iterator { int index = 0; @Override public boolean hasNext() { if (index < size) { return true; } index = 0; return false; } @Override public Object next() { Object object = elementData[index]; index++; return object; } } }