package com.github.mrwengq.first; public class ArrayList implements List { private int size = 0; private Object elementData[] = new Object[5]; public void add(Object o) { if (size >= elementData.length) elementData = copyAddArray(elementData); elementData[size] = o; size++; } public void add(int index, Object o) { if (index > size - 1 || index < 0) { throw new ArrayIndexOutOfBoundsException(); } else { elementData = addUpdateArray(elementData, index); elementData[index] = o; size++; return; } } public Object get(int index) { if (index > size - 1 || index < 0) throw new ArrayIndexOutOfBoundsException(); else return elementData[index]; } public Object remove(int index) { if (index > size - 1 || index < 0) throw new ArrayIndexOutOfBoundsException(); if (index == size - 1) { elementData[index] = null; size--; return null; } else { delUpdateArray(elementData, index); size--; return null; } } public int size() { return size; } public Iterator iterator() { return new Iterator() { int index=-1; public boolean hasNext() { index++; if(index<size){ Object ob = elementData[index]; return true; } return false; } public Object next() { return elementData[index]; } }; } private Object[] copyAddArray(Object elementData[]) { //对数组扩容 增加量为原长度3/4 Object ob[] = new Object[elementData.length+(elementData.length * 3) / 4]; System.arraycopy(((Object) (elementData)), 0, ((Object) (ob)), 0, elementData.length); return ob; } private Object[] addUpdateArray(Object elementData[], int index) {//添加时修改数组索引 Object temp = null; //中间变量 for (int i = 0; i < size; i++) if (i > index) {//判断受影响索引 temp = elementData[index]; elementData[index] = elementData[i]; elementData[i] = temp; if (i == size - 1) { //判断为最后一位 if (size > elementData.length) elementData = copyAddArray(elementData); elementData[size] = elementData[index]; } } return elementData; } private void delUpdateArray(Object elementData[], int index) {//删除时修改索引 for (int i = 0; i < size; i++){ if (i > index && i < size ){//判断受影响索引 elementData[i - 1] = elementData[i]; if (i == size - 1){ elementData[i] = null; } } } } }