package com.coding.basic; import java.util.Arrays; public class ArrayList implements List { private int size = 0; private final int stepLength = 16; private Object[] elementData = new Object[stepLength]; public void add(Object o) { checkCapacity(); elementData[size++] = o; } public void add(int index, Object o) { checkIndex(index); checkCapacity(); 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 tempObj = elementData[index]; System.arraycopy(elementData, index + 1, elementData, index, size - index - 1); size--; return tempObj; } public int size() { return size; } private void checkIndex(int index) { if (index < 0 || index > size - 1) { throw new IndexOutOfBoundsException("数组下标越界"); } } private void checkCapacity() { if (size + 1 > elementData.length) { elementData = Arrays.copyOf(elementData, elementData.length + stepLength); } } public Iterator iterator() { return new Itr(); } private class Itr implements Iterator { int cursor = 0; public boolean hasNext() { return cursor < size; } public Object next() { return elementData[cursor++]; } } }