package cn.sxt.mycollection;
import javax.management.RuntimeErrorException;
public class SxtArrayList<E> {
private Object[] elementData;
private int size=0;
private static final int DEFALT_CAPACITY=10;
public SxtArrayList() {
elementData = new Object[DEFALT_CAPACITY];
}
public SxtArrayList(int capacity) {
if(capacity<0) {
throw new RuntimeException( "容器容量不能为负数");
}else if(capacity==0) {
elementData = new Object[DEFALT_CAPACITY];
}else elementData = new Object[capacity];
}
public void add(E element) {
if(size==elementData.length) {
Object[] newArray = new Object[elementData.length+(elementData.length>>1)];
System.arraycopy(elementData, 0, newArray, 0, elementData.length);
elementData=newArray;
}
elementData[size++]=element;
}
public void remove(int index) {
checkIndex(index);
int numMoved=elementData.length-index-1;
if(numMoved>0) {
System.arraycopy(elementData, index+1, elementData, index, numMoved);
}
elementData[--size]=null;
}
public void remove(E element) {
for(int i=0;i<size;i++) {
if(element.equals(get(i))) {
remove(i);
break;
}
if(i==size-1) {
System.out.println("remove no found");
}
}
}
public E get(int index) {
checkIndex(index);
return (E)elementData[index];
}
public void set(int index,E element) {
checkIndex(index);
elementData[index] = element;
}
public void checkIndex(int index) {
if(index<0||index>size-1) {
throw new RuntimeException("索引不合法:"+index);
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
for(int i=0;i<size;i++) {
sb.append(elementData[i]+",");
}
sb.setCharAt(sb.length()-1, ']');
return sb.toString();
}
public static void main (String[] args) {
SxtArrayList s1=new SxtArrayList();
for(int i = 0;i<20;i++) {
s1.add("goes"+(i+1));
}
System.out.println(s1.get(10));
System.out.println(s1);
System.out.println(s1.get(8));
s1.set(3,"lalala");
s1.remove(6);
s1.remove("goes11");
System.out.println(s1);
}
}