import java.util.Arrays;
public class MyArrayList {
private Object[] elementData;
private int size;
private static final Object[] EMPTY_ELEMENTDATA = {};
private static final int DEFAULT_CAPACITY = 10;
public MyArrayList(){
this.elementData = EMPTY_ELEMENTDATA;
}
public MyArrayList(int initialCapcity) {
if(initialCapcity<0) {
throw new IllegalArgumentException("容量大小错误");
}
this.elementData = new Object[initialCapcity];
}
public void add(E e) {
//考虑需不需要扩容
ensureCapacityInternal();
//往数组中存储元素,同时计数加1
elementData[size++] = e;
}
public int size() {
return size;
}
public Object[] elementData() {
return elementData;
}
public boolean isEmpty() {
return size==0;
}
public void clear() {
for(int i=0;isize) {
throw new IndexOutOfBoundsException("插入元素下标越界");
}
//考虑是否需要扩容
ensureCapacityInternal();
System.arraycopy(elementData, index,
elementData, index+1, size-index);
//替换指定下标位置元素
elementData[index] = e;
size++;
}
public E remove(int index) {
//判断下标
if(index<0 || index>=size) {
throw new IndexOutOfBoundsException("删除元素下标越界");
}
//获取需要被删除的元素
E oldValue = (E)elementData[index];
System.arraycopy(
elementData, index+1,
elementData, index, size-index-1);
size--;
return oldValue;
}
public int indexOf(E e) {
if(e==null) {
for(int i=0;i=size) {
throw new IndexOutOfBoundsException("获取元素下标越界");
}
return (E)elementData[index];
}
private void ensureCapacityInternal() {
if(elementData.length==0) {//第1次添加元素
this.elementData = new Object[DEFAULT_CAPACITY];
}else if(elementData.length==size) {//数组满了
this.elementData = Arrays.copyOf(
elementData,elementData.length+(elementData.length>>1));
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder("[");
for(int index=0;index list = new MyArrayList();
// System.out.println(list.size);
// System.out.println(Arrays.toString(list.elementData()));
list.add("aaa");
list.add(null);
list.add("ccc");
list.add("bbb");
list.add("ccc");
list.add(null);
//[aaa,bbb,ccc,null]
System.out.println(list);
list.remove(null);
list.remove("ccc");
System.out.println(list);
// System.out.println(list.indexOf(null));//1
// System.out.println(list.indexOf("ccc"));//2
// list.add(3,"mmm");
// list.add(7,"nnn");
// System.out.println(list);
//
// //[aaa,bbb,ccc,mmm,aaa,bbb,ccc,nnn]
// String e = list.remove(2);
// System.out.println("e:"+e);
// System.out.println(list);
}
}