package com.coding.basic; import java.util.Arrays; import java.util.NoSuchElementException; public class ArrayList implements List { private int size = 0; //表内现有元素个数 private Object[] elementData = new Object[2]; //数据结构--数组 public void add(Object o){ //在后面追加 if(size == elementData.length) elementData = grow(elementData, 2* elementData.length); //先扩容 elementData[size++] = o; } public void add(int index, Object o){ //在指定位置插入 if(size == elementData.length) elementData = grow(elementData, 2* elementData.length); //先扩容 if(index > size || index < 0) throw new ArrayIndexOutOfBoundsException(); //保证最后一个元素后面也可以插 System.arraycopy(elementData,index, elementData,index+1,size-index); elementData[index] = o; size ++; } public Object get(int index){ //返回指定索引的元素 if(index > size - 1 || index < 0) throw new ArrayIndexOutOfBoundsException(); return elementData[index]; } public Object remove(int index){ //删除指定索引处的元素 if(index > size - 1 || index < 0) throw new ArrayIndexOutOfBoundsException(); Object o = elementData[index]; System.arraycopy(elementData,index+1, elementData,index,size-index-1); elementData[size-1] = null; size --; return o; } public int size(){ //number of elements return size; } public Iterator iterator(){ //迭代器 return new ListIterator(); } private class ListIterator implements Iterator{ //实例内部类 private int i = 0; @Override public boolean hasNext() { return i < size; } @Override public Object next() { if(size() == 0) throw new NoSuchElementException("Stack Underflow"); return elementData[i++]; } } //数组扩容 private Object[] grow(Object[] src, int newLength){ assert src.length < newLength; //断言 return Arrays.copyOf(src,newLength); } }