package com.coding.basic.homework_01;
import java.util.Arrays;
public class ArrayList implements List {
private int size = 0;
private int pos = 0; // 当前数组的末尾元素的下一位置
private Object[] elementData = new Object[3];
public void add(Object o){
if(pos >= elementData.length - 1){
//数组扩容1/3
elementData = Arrays.copyOf(elementData, elementData.length + elementData.length/3);
}
elementData[pos++] = o;
}
public void add(int index, Object o){
if(pos >= elementData.length - 1){
//数组扩容1/3
elementData = Arrays.copyOf(elementData, elementData.length + elementData.length/3);
}
/*
* 情况1.index < pos && pos < elementData.length - 1
* index 只能在pos前面
*/
if(index <= pos && pos <= elementData.length - 1){
Object[] tem = new Object[pos - index];
System.arraycopy(elementData, index, tem, 0, tem.length);
elementData[index] = o;
System.arraycopy(tem, 0, elementData, index + 1, tem.length);
pos++;
}else{
throw new IndexOutOfBoundsException();
}
}
public Object get(int index){
if(index < pos){
return elementData[index];
}
throw new IndexOutOfBoundsException();
}
public Object remove(int index){
Object result;
//将数字删除并将该数字后面的元素向前移动一位
if(index < pos ){ //只有index在pos之前才进行删除操作
result = elementData[index];
if(pos - index > 1){ //删除的不是最后一个元素
Object[] tem = new Object[pos - index - 1];
System.arraycopy(elementData, index + 1, tem, 0, tem.length);
for(int i=0; i<tem.length; i++){
elementData[index + i] = tem[i];
}
}
elementData[--pos] = null;
return result;
}
throw new IndexOutOfBoundsException();
}
public int size(){
return pos;
}
public Iterator iterator(){
return new Iterator(){
private int cur = 0;
@Override
public boolean hasNext() {
if(cur < pos){
return true;
}
return false;
}
@Override
public Object next() {
return elementData[cur++];
}
};
}
public static void main(String[]args){
ArrayList list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(0, 0);
// list.add(5, 0);
// list.add(5, 0);
// list.add(5, 0);
// list.add(5, 0);
Iterator it = list.iterator();
// while(it.hasNext()){
// System.out.print(it.next()+" ");
// }
System.out.println();
// System.out.println(list.get(0));
System.out.println(list.remove(0));
while(it.hasNext()){
System.out.print(it.next()+" ");
}
System.out.println();
System.out.println(list.size());
}
}