/**
* Created by eason on 2018/11/19.
*/
import java.util.Arrays;
/**
* 先不使用泛型
*/
public class SimpleList {
private Object[] elementData;
private int size;
public SimpleList(){
}
public SimpleList(int initSize){
if (initSize < 0){//参数不合法,抛出异常
throw new IllegalArgumentException("IllegalArgument:" + initSize);
}
elementData = new Object[initSize];
}
//添加
public void add(Object obj){
checkCapacity(size + 1);//插入一个元素,检查一下数组是否存在size+1大小的空间。
elementData[this.size++] = obj;//在数组的末尾添加该元素
}
public void add(int index, Object obj){//在index位置插入元素obj
RangeCheck(index);
checkCapacity(size + 1);//插入一个元素,至少需要size+1大小的空间
System.arraycopy(elementData, index, elementData, index+1, size - index);
elementData[index] = obj;
size++;
}
private void checkCapacity(int needCapacity){//检查ArrayList开辟的空间是否足够,如果不足则进行扩容
if (needCapacity > elementData.length){
Object oldElement[] = elementData;
int newSize = this.size * 2 + 1;//扩容后空间
elementData = new Object[newSize];
elementData = Arrays.copyOf(oldElement, newSize);
}
}
private void RangeCheck(int index){//检查索引是否合法
if (index < 0 || index >= size){
throw new IndexOutOfBoundsException("IllegalArgument" + index);//数组越界,抛出异常
}
}
//查询
public Object get(int index){//根据索引返回对象
RangeCheck(index);
return elementData[index];
}
//修改
public Object set(int index, Object obj){//将index位置设置为obj
RangeCheck(index);
Object oldValue = elementData[index];
elementData[index] = obj;//设置新值
return oldValue;//?set方法不是应该返回void吗
}
//删除
public Object remove(int index){//删除index处的元素
RangeCheck(index);
Object oldValue = elementData[index];
int moveNum = size - index - 1;
if (moveNum > 0){//直接覆盖了index位置上的对象
System.arraycopy(elementData, index + 1, elementData, index, moveNum);
}
elementData[--size] = null;//让垃圾回收器回收, 数组上的最后一个对象置位null
return oldValue;
}
public boolean remove(Object obj){//删除等于obj的元素, 成功返回true, 失败返回false
if (obj == null){
for (int i = 0; i < size; i++) {
if (elementData[i] == null){
fastremove(i);
return true;
}
}
}else {
for (int i = 0; i < size; i++) {
if (obj.equals(elementData[i])){
fastremove(i);
return true;
}
}
}
return false;
}
private void fastremove(int index){
int moveNum = size - index - 1;
if (moveNum > 0){
System.arraycopy(elementData, index + 1, elementData, index, moveNum);
}
elementData[--size] = null;
}
public int size(){
return this.size;
}
public boolean isEmpty(){
return false;
}
public static void main(String[] args) {
SimpleList simpleList = new SimpleList(5);
//末尾插入
simpleList.add(new A("AAA"));
simpleList.add(new A("BBB"));
simpleList.add(new A("CCC"));
simpleList.add(new A("DDD"));
simpleList.add(new A("EEE"));
//在index为3的位置插入XXX
simpleList.add(3, new A("XXX"));
// simpleList.add(8, new A("YYY"));
System.out.println(((A)simpleList.get(3)).name);
}
}
class A{
String name;
public A(String name){
super();
this.name = name;
}
}