package com.lzq.ArrayList;
public interface List<E> {
//获取实际储存内容的大小
int size();
//判断数组实际储存内容是否为空
boolean isEmpty();
//往数组中添加内容
void add(E e);
//取数据
E get(int index);
//删除
boolean remove(int index);
}
package com.lzq.ArrayList;
public class ArrayList<E> implements List<E>{
//定义ArrayList的初始容量大小
private static int DEFAULT_CAPACITY = 2;
//定义实际储存了多少
private int size;
//定义储存的数组
private Object[] elementData;
//无参构造函数,数组默认初始化长度为10
public ArrayList() {
elementData = new Object[10];
}
//有参构造函数,可以定义数组的大小
public ArrayList(int length) {
elementData = new Object[length];
}
//获取实际储存内容的大小
public int size() {
return size;
}
//判断数组实际储存内容是否为空
public boolean isEmpty() {
return size == 0;
}
//往数组中添加内容
public void add(E e) {
//验证数组是否已经满了,如果满了那么就扩容
if((size + 1) >elementData.length){
int oldLength = elementData.length;
int newLength = oldLength * 2;
Object[] elementDate_temp = new Object[newLength];
//把数据复制到临时数组
for(int i = 0; i < oldLength; i++){
elementDate_temp[i] = elementData[i];
}
elementData = elementDate_temp;
}
//把内容放到数组,并且size+1
elementData[size++] = e;
}
//取数据
public E get(int index) {
if(index < 0 || index >= elementData.length){
throw new RuntimeException("索引不合法!!!!");
}
return (E)elementData[index];
}
//删除元素
public boolean remove(int index) {
//验证索引是否合法
if(index < 0 || index >= size){
throw new RuntimeException("索引不合法!!!!");
}
//把改元素置空如果size == elementData.length && index ==size - 1 那么最后一个元素不能被他后面的元素覆盖
elementData[index] = null;
//数组元素逐个往前移动
for(int i = (index + 1); i < size; i ++){
elementData[i - 1] = elementData[i];
}
size --;
return true;
}
}