package myArrayList;
import java.util.Arrays;
public class MyArrayList {
private Object[] elementData;// 属性 数组
private int size;// 属性 大小 表示数组中存储数据的多少 不是表示数组的长度;
public MyArrayList() {
elementData = new Object[10];
}
public MyArrayList(int index) {
check(index);
elementData = new Object[index];
}
public int size() {
return size;
}
public void add(E e) {
dilatation();
elementData[size] = e;
size++;
}
public void add(int index, E e) {
check(index, size);
dilatation();
for (int i = size; i > index; i--) {
elementData[i] = elementData[i - 1];
}
elementData[index] = e;
size++;
}
public void clear() {
elementData = new Object[10];
size = 0;
}
public void remove(int index) {
check(index, size - 1);
for (int i = index; i < size - 1; i++) {
elementData[i] = elementData[i + 1];
}
elementData[size - 1] = null;
size--;
}
public void set(int index, E e) {
check(index, size - 1);
elementData[index] = e;
}
public Object get(int index) {
check(index, size - 1);
return elementData[index];
}
public boolean isEnpty() {
return size == 0;
}
private void check(int index, int max) {
if (index < 0 || index > max) {
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
}
private void check(int index) {
if (index < 0) {
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
}
private String outOfBoundsMsg(int index) {
return "Index: " + index + ", Size: " + size;
}
private void dilatation() {// 扩容方法
if (size == elementData.length) {
Object[] newElementData = new Object[elementData.length + elementData.length >> 1];
newElementData = Arrays.copyOf(elementData, elementData.length);
elementData = newElementData;
}
}
}