package my.collection.linear;
import java.util.Arrays;
public class MyArrayList implements MyList{
private int size = 0;
private int CAPACITY = 10;
private Object[] elementData = new Object[CAPACITY];
public MyArrayList(int len){
this.elementData = new Object[len];
}
public void add(Object obj){
add(size,obj);
}
public void add(int index, Object obj){
if(index < 0){
System.out.println("insert position illegal.");
}else{
if(size + 1 < elementData.length){
System.arraycopy(elementData, 0, this.elementData, 0, index);
System.arraycopy(elementData, index, this.elementData, index+1, elementData.length-index-1);
this.elementData[index] = obj;
}else{
Object[] newElementData = Arrays.copyOf(elementData, elementData.length + CAPACITY);
System.arraycopy(elementData, index, newElementData, index+1, elementData.length - index);
newElementData[index] = obj;
this.elementData = newElementData;
}
size++;
}
}
public Object remove(int index){
if(index == 0){
System.arraycopy(elementData, 1, this.elementData, 0, elementData.length-1);
}else{
System.arraycopy(elementData, 0, this.elementData, 0, index);
System.arraycopy(elementData, index + 1, this.elementData, index, elementData.length-index-1);
}
size--;
return elementData[index];
}
public Object get(int index){
if(index < 0 || index > elementData.length-1){
return "get position illegal.";
}else{
return elementData[index];
}
}
public int size(){
return size;
}
public String toString(){
String str ="toString():";
for(int i=0; i<size; i++){
str += elementData[i] + "\t";
}
return str;
}
/*private void grow(int stepLen){
Object[] largerElement = new Object[CAPACITY + stepLen];
System.arraycopy(elementData, 0, largerElement, 0, elementData.length);
elementData = largerElement;
}*/
public MyIterator myIterator(){
return new MyArrayListIterator(this);
}
private class MyArrayListIterator implements MyIterator{
@SuppressWarnings("unused")
MyArrayList list = null;
int pos = 0;
private MyArrayListIterator(MyArrayList list){
this.list = list;
}
public boolean hasNext() {
if(++pos > size){
return false;
}else{
return true;
}
}
public Object next() {
return get(pos);
}
public Object remove(){ //?
return MyArrayList.this.remove(this.pos);
}
}
}