package com.coding.basic;
/**
* 实现 ArrayList - 第一次作业
* @author stackwei
* @date 2017/2/25
* @status ok
*/
public class ArrayList implements List {
private int flag = -1;
private static final int DEFAULT_CAPACITY = 1;
private Object[] elementData = new Object[DEFAULT_CAPACITY];
@Override
public void add(Object element) {
// 当要添加数据的位置已经超过数组长度时,增长数组长度
if (size() + 1 == elementData.length) {
grow();
}
elementData[flag + 1] = element;
flag++;
}
@Override
public void add(int index, Object element) {
if (index < 0 || index > getFlag() + 1) {
System.out.println("在--" + index + "--添加的--" + element + "--无效,因为越界了!");
return;
}
// 数组长度永远比已存数据大一个。
if (size() + 1 == elementData.length) {
grow();
}
elementData[index] = element;
if (index > getFlag()) {
flag++;
}
}
@Override
public Object get(int index) {
if (index < 0 || index > getFlag()) {
System.out.print("在--" + index + "--的get无效,因为越界了!");
return null;
}
return elementData[index];
}
@Override
public Object remove(int index) {
if (index < 0 || index > getFlag()) {
System.out.println("在--" + index + "--的remove无效,因为越界了!");
return null;
}
Object oldValue = elementData[index];
elementData[index] = null;
// 将删除处后面的数据往前移一格。
Object[] data2 = new Object[elementData.length - 1];
System.arraycopy(elementData, 0, data2, 0, getFlag());
elementData = data2;
flag--;
return oldValue;
}
@Override
public int size() {
return getFlag() + 1;
}
public int getFlag() {
return flag;
}
private void grow() {
Object[] data2 = new Object[elementData.length + 1];
System.arraycopy(elementData, 0, data2, 0, getFlag() + 2);// 最后一个参数是需要复制的数据的数量。
elementData = data2;
}
/**
* 测试用例
*
* @param args
*/
public static void main(String[] args) {
ArrayList al = new ArrayList();
al.add(0, 99);
al.add(1, 100);
System.out.println(al.get(1));
al.remove(1);
System.out.println(al.get(1));
System.out.println(al.size());
}
}