package com.coding.basic;
//import java.util.Arrays;
public class ArrayList implements List {
private int size = 0; // 记录数组当前长度
private Object[] elementData = new Object[10]; // 初始长度
/*
* (non-Javadoc)
*
* @see com.coding.basic.List#add(java.lang.Object)
*/
public void add(Object o) {
if (size > elementData.length) { // size大于数组初始长度,需要对原数组进行扩容
grow(elementData, 10);
}
this.elementData[size++] = o;
}
/*
* 在指定下标位置插入元素 (non-Javadoc)
*
* @see com.coding.basic.List#add(int, java.lang.Object)
*/
public void add(int index, Object o) {
if (size > elementData.length) { // size大于数组初始长度,需要对原数组进行扩容
grow(elementData, 10);
}
if (index > size || index < 0)
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
System.arraycopy(elementData, index, elementData, index + 1, size - index);
elementData[index] = o;
size++;
}
public Object get(int index) {
// 1、先要判断index所在处有无值,没有则返回null
Object o = elementData[index];
if (null == o)
throw new IndexOutOfBoundsException();
return o;
}
public Object remove(int index) {
Object oldVal = elementData[index]; // 保留要删除的元素
int numMoved = size - index - 1;
if (numMoved > 0) {
System.arraycopy(elementData, index + 1, elementData, index, numMoved);// 讲移除位置之后的元素向前 挪动
}
elementData[--size] = null; // 将数组末尾元素置为空
return oldVal;
}
/**
* 获取数组元素个数
*/
public int size() {
return this.size;
}
public Object[] grow(Object[] src, int size) {
// Arrays.copyOf(src, src.length+size);
Object[] target = new Object[src.length + size];
System.arraycopy(src, 0, target, 0, src.length);
return target;
}
public Iterator iterator() {
return new ArrayListIterator();
}
private class ArrayListIterator implements Iterator {
private int cursor=0;
@Override
public boolean hasNext() {
return size != cursor;
}
@Override
public Object next() {
return elementData[cursor++];
}
}
}