public class MyList {
private transient Object[] elementData;
private int size;
public MyList(int initialCapacity) {
elementData = new Object[initialCapacity];
}
public MyList() {
this(10);
}
public void add(Object obj) {
if (size == elementData.length) {
Object[] newElementData = increase();// 扩容
elementData = newElementData;
}
elementData[size++] = obj;
}
// 扩容方法
public Object[] increase(){
Object[] newElementData = new Object[(size << 1)];// 扩容到2倍
System.arraycopy(elementData, 0, newElementData, 0,
elementData.length);
return newElementData;
}
// 删除
public boolean remove(int i) {
// 删除不需要考虑库容问题,把后面的索引指向下一个对象,最后一个对象清空
if(i>=0 && i<size){
for (int j = i; j < size; j++) {
elementData[j] = elementData[j + 1];
}
size--;
return Boolean.TRUE;
}
return Boolean.FALSE;
}
// 修改
public boolean modify(int i,Object obj) {
if(i>=0 && i<size){
elementData[i]=obj;
}
return Boolean.FALSE;
}
// 获取某一个
public Object get(int i) {
if (i <= size) {
return elementData[i];
}
return null;
}
public boolean isEmpty() {
return size == 0;
}
public int size() {
return size;
}
public static void main(String[] args) {
MyList list = new MyList();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
list.add("7");
list.add("8");
list.add("9");
list.add("10");
list.add("11");
list.add("12");
list.add("13");
list.remove(1);
//list.modify(11, 88);// 最后一个改为88
for (int j = 0; j < list.size; j++) {
System.out.println(list.get(j));
}
System.out.println(list.get(1000));
}
}
删除方法用了最原始的方式,并没有用System.arraycopy,其实是一样的