package com.coding.basic;
import java.util.NoSuchElementException;
public class ArrayList implements List {
private int size = 0;
private Object[] elementData = new Object[100];
private void addLength(){
int len = elementData.length;
Object[] temp = new Object[len+50];
for(int i=0;i<len;i++){
temp[i] = elementData[i];
}
elementData = temp;
}
public void add(Object o){
if(size()<elementData.length){
elementData[size] = o;
size++;
}else{
addLength();
elementData[size] = 0;
size ++;
}
}
public void add(int index, Object o){
if(index<0||index>size()){
throw new IndexOutOfBoundsException();
}
if(size==elementData.length){
addLength();
}
for(int i=size;i>index;i--){
elementData[i] = elementData[i-1];
}
elementData[index] = o;
size++;
}
public Object get(int index){
if(index<0||index>=size()){
throw new IndexOutOfBoundsException();
}
return elementData[index];
}
public Object remove(int index){
if(index<0||index>=size()){
throw new IndexOutOfBoundsException();
}
Object temp = elementData[index];
for (int i = index; i < size-1; i++) {
elementData[i] = elementData[i+1];
}
elementData[size-1] = null;
size--;
return temp;
}
public int size(){
return this.size;
}
public Iterator iterator(){
return new ArrayListIterator();
}
private class ArrayListIterator implements Iterator{
private Object[] array;
private int index;
public ArrayListIterator(){
array = new Object[size];
index = 0;
for (int i = 0; i < size; i++) {
array[i] = elementData[i];
}
}
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
if(index>=0&&index<array.length){
return true;
}
return false;
}
@Override
public Object next() {
if(index<0||index>=array.length){
throw new NoSuchElementException();
}
Object temp = array[index];
index ++;
return temp;
}
}
}