package test01.arrayList;
public class CetrinwArrayList<E> implements CetrinwList<E> {
/**
* 数组默认长度
*/
private static final int DEFAULT_SIZE=10;
/**
* 存储队列中的元素
*/
private Object[] elements=null;
/**
* 数组大小指针
*/
private int capacity;
/**
* 当前游标
*/
private int current;
public CetrinwArrayList() {
this(DEFAULT_SIZE);
}
public CetrinwArrayList(int size) {
if (size<0) {
throw new RuntimeException("数组大小不能小于0");
} else {
this.elements=new Object[size];
this.current=0;
this.capacity=size;
}
}
@Override
public E get(int index) {
confirmIndex(index);
return (E)elements[index];
}
@Override
public void add(E e) {
confirmSize();
this.elements[current]=e;
this.current++;
}
@Override
public void remove(int index) {
confirmIndex(index);
for (int i = index; i < elements.length; i++) {
if (i+1<elements.length) {
elements[i]=elements[i+1];
}
}
this.current--;
}
@Override
public void insert(int index, E e) {
confirmIndex(index);
for (int i = current; i >=index; i--) {
elements[i+1]=elements[i];
}
elements[index]=e;
current++;
}
@Override
public boolean contains(Object o) {
for (Object object : elements) {
if (object.equals(o)) {
return true;
}
}
return false;
}
@Override
public int size() {
return this.current;
}
@Override
public boolean isEmpty() {
if (current>0) {
return false;
}
return true;
}
@Override
public void clearList() {
for (int i = 0; i < current; i++) {
elements[i]=null;
}
}
/**
* 确认当前数组的容量,如果满足,则不操作,如果不满足,则增加空间
*/
private void confirmSize(){
if (this.current==this.capacity) {
this.capacity=this.capacity*3/2;
Object[] newElements=new Object[this.capacity];
System.arraycopy(elements, 0, newElements, 0, elements.length);
this.elements=newElements;
}
}
/**
* 判断下标是否越界
*/
private void confirmIndex(int index){
if (index>capacity||index<0) {
throw new RuntimeException("下标越界");
}
}
}