package com.coding.basic;
public class ArrayList implements List {
private int size = 0;
private Object[] elementData = new Object[100];
/**
* 在队尾添加元素
*/
public void add(Object o){
if(size+1>elementData.length)this.grow(elementData);
else{
elementData[size]=o;
size++;
}
}
/**
* 在index处添加元素,index+1到size-1元素向后移动
*/
public void add(int index, Object o){
if(index<0||index>size){
System.out.println("数组越界"+index);
return;
}
if(size+1>elementData.length)this.grow(elementData);
else {
for(int i=size;i>=index+1;)
{
elementData[i]=elementData[--i];
}
size++;
elementData[index]=o;
}
}
/**
* 获得index处的元素elementData[index]
*/
public Object get(int index){
//TODO越界抛出异常
if(index<0||index>size){
System.out.println("数组越界"+index);
return null;
}
else{
return elementData[index];
}
}
/**
* 移除index处的元素,将index+1到size-1的元素向前移动
*/
public Object remove(int index){
//TODO越界抛出异常
if(index<0||index>=size){
System.out.println("数组越界"+index);
return null;
}
else{
Object value=elementData[index];
for(int i=index;i<size;)
{
elementData[i]=elementData[++i];
}
size--;
return value;
}
}
public int size(){
return size;
}
public Iterator iterator(){
return new Itr();
}
private class Itr implements Iterator {
int cursor; // index of next element to return
Itr() {
cursor=0;
}
public boolean hasNext() {
return cursor != size;
}
public Object next() {
int i = cursor;
if (i >= size)
System.out.println("超过size");;
Object[] elementData = ArrayList.this.elementData;
if (i >= elementData.length)
System.out.println("超过length");
cursor = i + 1;
return elementData[i];
}
}
public Object[] toArray() {
Object[] array= new Object[size];
for (int i = 0; i < elementData.length; i++) {
array[i]=elementData[i];
}
return array;
}
public void grow(Object[] elementData2){
int[] elementData=new int[elementData2.length+elementData2.length/2];
System.arraycopy(elementData2,0,elementData,0,elementData2.length);
}
/**
* 测试方法
* @param args
*/
public static void main(String args[]){
ArrayList list=new ArrayList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
list.add(6);
//list.add(2,0);
//list.remove(list.size-1);
System.out.println(list.size());
Iterator itr=list.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}
}
}