package com.github.Ven13.coding2017.basic; public class ArrayList implements List { //���ؼ��ϴ�С private int size = 0; //�ȸ���һ������Ϊ10������ Object[] elementData = new Object[100]; @Override //��̬���Ԫ�� public void add(Object o) { //���ж������Ƿ����� if(size == elementData.length) { Object[] newObjects = new Object[elementData.length * 2]; System.arraycopy(elementData, 0, newObjects, 0, elementData.length); elementData = newObjects; } //Ϊ����ӵ�Ԫ��ָ���±� elementData[size] = o; size++; } @Override public void add(int index, Object o) { //���ж������Ƿ����� if(size == elementData.length) { Object[] newObjects = elementData; this.elementData = new Object[elementData.length * 2]; for(int j = 0; j < newObjects.length; j++) { this.elementData[j] = newObjects[j]; } } for(int i = size - 1; i >= index; i--) { elementData[i+1] = elementData[i]; } elementData[index] = o; size++; } @Override public Object get(int index) { return elementData[index]; } @Override public Object remove(int index) { if (index > size) { return null; }; int moveSize = size - index - 1; if (moveSize > 0) { System.arraycopy(elementData, index + 1, elementData, index, size - index - 1); } elementData[--size] = null; //for(int i = index; i < elementData.length; i++) { // elementData[i] = elementData[i+1]; //} return elementData; } @Override public int size() { return size; } public Iterator iterator(){ return new ArrayListIterator(); } private class ArrayListIterator implements Iterator { private int currentIndex = 0; @Override public boolean hasNext() { if(currentIndex >= size) return false; else return true; } @Override public Object next() { Object o = elementData[currentIndex]; currentIndex ++; return o; } } }