package com.mycoding; import java.util.NoSuchElementException; public class ArrayList implements List { private int size = 0; private Object[] elementData = new Object[10]; //增加元素 public void add(Object o) { if (size()>=elementData.length) { elementData = ArrayList.grow(elementData,elementData.length); } elementData[size++] = o; } //在指定位置上增加元素 public void add(int index, Object o) { if(index < 0 || index > size()) { throw new IndexOutOfBoundsException(); } else if(index == 0 || index > 0 && index < size()) { elementData = ArrayList.grow(elementData,elementData.length); for(int i=size()-1;i>=index;i--) { elementData[i+1] = elementData[i]; } elementData[index] = o; size++; } else if(index == size()) { elementData = ArrayList.grow(elementData,elementData.length); elementData[size++] = o; } } //返回此列表中指定位置上的元素 public Object get(int index) { if (index < 0 || index >= size()) { throw new IndexOutOfBoundsException(); } else { return elementData[index]; } } //删除指定位置的元素 public Object remove(int index) { if (index < 0 || index >= size()) { throw new IndexOutOfBoundsException(); } if(index == 0 || index > 0 && index < size()) { for(int i=index;i<size()-1;i++){ elementData[i] = elementData[i+1]; } size--; } return elementData; } public int size() { return size; } //扩容 public static Object[] grow(Object[] src,int size) { Object[] target = new Object[2*size]; System.arraycopy(src, 0, target, 0, size); return target; } public Iterator iterator() { return new ArrayListIterator(this); } private class ArrayListIterator implements Iterator { @SuppressWarnings("unused") ArrayList array = null; int cursor=0; private ArrayListIterator(ArrayList array) { this.array = array; } @Override public boolean hasNext() { return cursor < size; } @Override public Object next() { if(!hasNext()) { throw new NoSuchElementException(); } return elementData[cursor++]; } } @Override public String toString() { StringBuffer str = new StringBuffer(); str.append("["); for (int i = 0; i < size(); i++) { str.append(elementData[i]+","); } str.deleteCharAt(str.length()-1); str.append("]"); return str.toString(); } }