package com.coding.basic;
public class ArrayList implements List {
private int size = 0;
private Object[] elementData = new Object[8];
public int test = 10;
public void add(Object o){
if(size + 1 >elementData.length){
expand();
}
elementData[size] = o;
size++;
}
/**
* Parameters:
* index index at which the specified element is to be inserted
* element element to be inserted
* Throws:
* IndexOutOfBoundsException - if the index is out of range (index < 0 || index > size())
*/
public void add(int index, Object o){
if(index <0 || index > size()) throw new IndexOutOfBoundsException(index + ": Invalid Index");
if(size()+1>elementData.length){
expand();
}
if(index < size())
System.arraycopy(elementData, index, elementData, index+1, size() - index);
elementData[index] = o;
size ++;
}
public Object get(int index){
if(index <0 || index >= size()) throw new ArrayIndexOutOfBoundsException(index + ": Invalid Index.");
return elementData[index];
}
public Object remove(int index) {
if(index <0 || index >= size()) throw new ArrayIndexOutOfBoundsException(index + ": Invalid Index.");
Object item = elementData[index];
if(size() == 1){
size--;
}else{
if(index<size()){
System.arraycopy(elementData, index+1, elementData, index, size-index);
size--;
}
}
return item;
}
public int size(){
return size;
}
public Iterator iterator(){
return new ArrayListIterImpl(this);
}
private void expand(){
Object[] newArray = new Object[elementData.length * 2];
System.arraycopy(elementData, 0, newArray, 0, size);
elementData = newArray;
}
public void dump(){
for(int i = 0; i< size(); i++){
System.out.print(elementData[i] + " ");
}
System.out.println();
}
private class ArrayListIterImpl implements Iterator{
Object[] oArray = null;
int cursor = 0;
public ArrayListIterImpl(ArrayList al){
if(al == null) throw new NullPointerException("Linkedlist Object is NULL");
oArray = new Object[al.size()];
for(int i = 0; i< al.size(); i++){
oArray[i] = al.get(i);
}
}
@Override
public boolean hasNext() {
if(cursor < oArray.length){
return true;
}
return false;
}
@Override
public Object next() {
Object o = oArray[cursor];
cursor ++;
return o;
}
}
}