package com.github.PingPi357.coding2017.homework1;
import java.util.Arrays;
public class ArrayList implements List {
private static final int DEFAULT_CAPACITY = 100; // 定义静态final类型,
// final在一个对象类唯一,
// static
// final在多个对象中都唯一,如果作为常量用的话,只是final的话就得在别的类引用的时候要创建对象,会占用不必要的空间,而加上static的话在编译的时候占用一个空间,其他时候就不会再占用空间了。所以常量一般用static修饰,其他时候看你自己的需要
// 理解:比如我是一个维修工人....public相当于我接任何活,static相当于10分钟之内赶到,final相当于就我一家.
// reference: http://bbs.itheima.com/thread-162971-1-1.html
int size = 0; // 如果是中文分号,报错:Syntax error on token "invalid Character", ;
// excepted;
private Object[] elementData = new Object[DEFAULT_CAPACITY]; // new
// Object后面接的是中括号
@Override
public void add(Object o) {
// TODO Auto-generated method stub
ensureCapacity(++size); // size自加操作
elementData[size - 1] = o;
}
private void ensureCapacity(int minCapacity) {
// TODO Auto-generated method stub
if (minCapacity <= elementData.length) { // 当满足小于等于的情况 ???
return;
} else {
elementData = Arrays.copyOf(elementData, minCapacity); // elementData写错为elementDta,导致报错 elementDta
// cannot be
// resolved
// as a
// variable
// 这里为什么不直接是minCapacity 而要加上原始elementData.length????
}
}
@Override
public void add(int index, Object o) {
// TODO Auto-generated method stub
if (index > size || index < 0) {
throw new ArrayIndexOutOfBoundsException();
}
ensureCapacity(++size); // size自加操作
for (int i = size - 2; i > index - 1; i--) { // for中用';'号隔开;
// ???i应该从size-2开始赋值
// ???终止条件为i>index-1
elementData[i + 1] = elementData[i];
}
elementData[index] = o; // 插入元素
}
@Override
public Object remove(int index) {
if (this.size > 0 && index < (this.size)) {
Object o = elementData[index];
for (int i = index; i < this.size; i++) {
elementData[i] = elementData[i + 1];
}
this.size--;
return o;
} else {
return null;
}
}
@Override
public Object get(int index) {
// TODO Auto-generated method stub
return elementData[index]; // 必须进行角标越界检查吗???
}
@Override
public int size() {
// TODO Auto-generated method stub
return this.size;
}
}