package com.github.ZhoufeifeiJAVA.coding2017.basic; public class MyArrayList implements List { private int size = 0; private Object[] elementData = new Object[10]; public void add(Object o){ if(size == elementData.length){ elementData = arrayGrow(elementData,size/2); } elementData[size] = o; size ++; } public void add(int index, Object o)throws RuntimeException{ if(index > size) throw new RuntimeException("index is bigger than the size of MyArrayList"); if(size == elementData.length){ elementData = arrayGrow(elementData,size/2); } if(index == size) add(o); else{ for(int i=size;i>index;i--){ elementData[i] = elementData[i-1]; } elementData[index] = o; } size ++; } private Object[] arrayGrow(Object[] src,int size){ Object[] target = new Object[src.length+size]; System.arraycopy(src, 0, target, 0, src.length); return target; } public Object get(int index){ if(index >= size) return null; else return elementData[index]; } public Object remove(int index)throws IndexOutOfBoundsException{ if(index>=size || index<0) throw new IndexOutOfBoundsException("index is bigger than the size of MyArrayList"); Object removeObject = elementData[index]; for(int i=index;i<size-1;i++) elementData[i] = elementData[i+1]; size --; return removeObject; } public int size(){ return size; } private class MyArrayListIterator implements Iterator{ private int pointer; MyArrayListIterator(){ pointer = 0; } public boolean hasNext() { if(pointer < size) return true; else return false; } public Object next() { pointer ++; return elementData[pointer-1]; } } public Iterator iterator(){ return new MyArrayListIterator(); } }