package com.coding.basic; import java.util.Arrays; public class ArrayList implements List{ private int size = 0; private Object[] elementData = new Object[100]; private int length; private static final int MAX_SIZE = 50; public ArrayList(){ this(MAX_SIZE); } public ArrayList(int maxSize){ length = 0; elementData = new Object[maxSize]; } public void add(Object o){ if(! isFull()){ elementData[size] =o; size++; } else elementData = Arrays.copyOf(elementData, elementData.length*2); } public void add(int index, Object o){ makeRoom(index); elementData[size-1] =o; size++; } public Object get(int index){ if(index>0 && index<size) { return elementData[index]; } else throw new IndexOutOfBoundsException("����Խ��"); } public Object remove(int index){ if(index<0||index>size){ System.out.println("����Խ��"); return null; } Object o = elementData[size]; System.arraycopy(elementData,index+1,elementData,index,size-index-1); elementData[size--] = null; return o; } public int size(){ return elementData.length; } public Iterator iterator(){ return null; } public boolean isFull(){ return size == elementData.length; } private void makeRoom(int index){ for(int i = size;i>=index;i--){ elementData[i] =elementData[i-1]; } } public Iterator getiterator(){ return new ArrayListIterator(this); } private class ArrayListIterator implements Iterator{ ArrayList l = null; private int nextIndex; ArrayListIterator(ArrayList l){ nextIndex = 0; this.l = l; } @Override public boolean hasNext() { return nextIndex<size; } @Override public Object next() { return elementData[nextIndex++]; } @Override public void remove() { ArrayList.this.remove(nextIndex); nextIndex--; } } }