package com.coding.basic.first.impl;
import com.coding.basic.first.List;
/**
* 实现一个ArrayList
* @author zap
*
*/
public class ArrayList implements List{
private int size;
private Object[] elementData = null;
private static final int DEFAULT_SIZE=100;
public ArrayList() {
this(DEFAULT_SIZE);
}
public ArrayList(int size) {
if(size < 0) {
System.out.println("size 必须大于0");
} else {
this.elementData = new Object[size];
}
}
@Override
public int size() {
return size;
}
@Override
public void add(Object o) {
judgeSize(size+1);
elementData[size++] = o;
}
@Override
public void add(int index, Object o) {
judgeIndexRangge(index);
System.arraycopy(elementData, index, elementData, index + 1,
size - index);//整体往后挪移--当前往后挪
elementData[index] = o;
size++;
}
@Override
public Object get(int index) {
judgeIndexRangge(index);
return elementData[index];
}
@Override
public Object remove(int index) {
judgeIndexRangge(index);
Object e = elementData[index];
System.arraycopy(elementData, index + 1, elementData, index,
size - index - 1);//整体往前挪移--后一位往前挪
size--;
return e;
}
private void judgeIndexRangge(int index){
if (index > size || index < 0)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
private String outOfBoundsMsg(int index) {
return "Index: "+index+", Size: "+size;
}
private void judgeSize(int size) {
if(size > elementData.length){
Object[] newarr = new Object[elementData.length + DEFAULT_SIZE];
System.arraycopy(elementData, 0, newarr, 0, elementData.length);
this.elementData = newarr;
}
}
}