package com.coding.basic; import java.util.Arrays; public class ArrayList implements List { private int size; private Object[] elementData; private static Object[] EMPTY_DATA = {}; public ArrayList(){ elementData = EMPTY_DATA; } /** * 固定容量初始化 * @param initialCapacity */ public ArrayList(int initialCapacity){ if(negativeVerify(initialCapacity)){ throw new IndexOutOfBoundsException(outOfBoundsMsg(initialCapacity)); } elementData = new Object[initialCapacity]; size = initialCapacity; } public void add(Object o){ elementData = Arrays.copyOf(elementData, elementData.length+1); elementData[size++] = o; } public void add(int index,Object o){ indexVerify(index); elementData = Arrays.copyOf(elementData, elementData.length+1); System.arraycopy(elementData, index, elementData, index + 1, size - index); elementData[index] = o; size++; } public int size(){ return size; } public Object get(int index){ indexVerify(index); return elementData[index]; } public Object remove(int index){ indexVerify(index); System.arraycopy(elementData, index+1, elementData, index, size-index-1); size--; return elementData[index]; } /** * 正整数边界验证 * @param verifiedNo * @return */ private boolean negativeVerify(int verifiedNo){ return verifiedNo < 0 ? true : false; } private void indexVerify(int verifiedIndex){ if(negativeVerify(verifiedIndex) && (size <= verifiedIndex)){ throw new IndexOutOfBoundsException(outOfBoundsMsg(verifiedIndex)); } } private String outOfBoundsMsg(int verifiedIndex) { return "位置: "+verifiedIndex+", 大小: "+size; } /** * 扩展 * @param growSize */ private void grow(int growSize){ elementData = Arrays.copyOf(elementData, size+growSize); } }