package basic; /** * 我的ArrayList实现 * @author Wayss * 2017-02-22 */ public class MyArrayList implements MyList { private int size = 0; private Object[] elementData = new Object[10]; /** * 往集合中添加一个元素 */ public void add(Object o){ int length = elementData.length; //1.比较元素个数和数组大小,判断是否需要扩大数组 if(size == length){ expandArray(); } //2.直接赋值给size,即最后一个元素 elementData[size] = o; size++; } /** * 往集合指定位置添加一个元素,该位置和其之后的元素向后移动一位。 * 位置不合法时,抛出异常。 */ public void add(int index, Object o){ int length = elementData.length; //0.先对index的值进行判断,小于0,或者,大于size,越界 if(index < 0 || index > size){ throw new IndexOutOfBoundsException("插入的下标越界了:"+"插入的下标为:"+index+"集合大小为:"+size); } //1.比较元素个数和数组大小,判断是否需要扩大数组 if(size == length){ expandArray(); } //2.移动index之后的数组元素 for(int i = size; i > index; i--){ elementData[i] = elementData[i-1]; } elementData[index] = o; size++; } public Object get(int index){ int length = elementData.length; //0.先对index的值进行判断,小于0,或者,大于等于size,便越界 if(index < 0 || index >= size){ throw new IndexOutOfBoundsException("插入的下标越界了:"+"插入的下标为:"+index+"集合大小为:"+size); } //2.拿出index位置的值, Object o = elementData[index]; return o; } public Object remove(int index){ //remove 前两步的逻辑和get方法相同 int length = elementData.length; //0.先对index的值进行判断,小于0,或者,大于等于size,便越界 if(index < 0 || index >= size){ throw new IndexOutOfBoundsException("插入的下标越界了:"+"插入的下标为:"+index+"集合大小为:"+size); } //2.拿出index位置的值, Object o = elementData[index]; //3.删除index位置的值,之后的值,向前移动。 for(int i = index; i < size-1; i++){ elementData[i] = elementData[i+1]; } size--; return null; } public int size(){ return size; } public MyIterator iterator(){ return new MyArrayListIterator(this); } private class MyArrayListIterator implements MyIterator{ private MyArrayList list = null; private int index = 0; private MyArrayListIterator(MyArrayList list){ this.list = list; } @Override public boolean hasNext(){ if(index < size){ return true; } return false; } @Override public Object next(){ return list.get(index++); } } private void expandArray(){ int length = elementData.length; Object [] newArr = new Object[length * 2]; for(int i = 0; i < length; i++){ newArr[i] = elementData[i]; } elementData = newArr; } }