package wiki.liven.code.dataStructures;
import java.util.Arrays;
/**
* Created by leven on 2017/2/21.
*/
public class ArrayList implements List{
/**
* 列表中元素的个数
*/
private int size = 0;
private int maxSize = 10;
/**
* 初始数组
*/
private Object[] elementData = new Object[maxSize];
/**
* 在指定的位置i插入元素O
* 插入元素,判断当前列表中元素的个数,
* 当size==100,则需要扩张数组
* 当size<100,则使用初始数组完成插入操作
* 插入操作:
* 从最后一个元素开始,往后移动一位,直到到index为止.
* @param index
* @param o
*/
@Override
public void add(int index, Object o) {
if(index<0||index>size-1)
throw new IndexOutOfBoundsException("数组下标越界异常。");
if (size==maxSize){
Object[] targt = new Object[++maxSize];
System.arraycopy(elementData,0,targt,0,elementData.length);
for (int j = targt.length-2;j>=index;j--){
targt[j+1] = targt[j];
}
targt[index] = o;
size++;
elementData = targt;
}else if(size<maxSize){
for (int j = size-1;j>=index;j--){
elementData[j+1] = elementData[j];
}
elementData[index] = o;
size++;
}
}
/**
* 追加元素
* @param o
*/
@Override
public void add(Object o) {
if (size==maxSize){
Object[] targt = new Object[++maxSize];
System.arraycopy(elementData,0,targt,0,elementData.length);
targt[maxSize-1] = o;
size++;
elementData = targt;
}else if(size<maxSize){
elementData[size] = o;
size++;
}
}
@Override
public Object get(int index) {
if(index<0||index>size-1)
throw new IndexOutOfBoundsException("数组下标越界异常");
Object o= elementData[index];
return o;
}
@Override
public Object remove(int index) {
if (index<0||index>size-1)
throw new IndexOutOfBoundsException("数组下表越界异常");
Object temp = elementData[index];
for (int i = index;i<=size-1;i++){
elementData[i] = elementData[i+1];
}
size--;
return temp;
}
@Override
public int size() {
return size;
}
@Override
public String toString() {
return "ArrayList{" +
"elementData=" + Arrays.toString(elementData) +
'}';
}
}