List--可以实现泛型存储的数组
public interface List<E> {//定义接口 可以实现多态
public void add(E target);
public boolean contains(E target);
public E get(int index);
public boolean isEmpty();
public E remove(int index);
public boolean remove(E target);
public void set(int index,E target);
public int size();
}
/**
* Created by root on 16-2-24.
*/
public class ArrayList<E> implements List<E> {
private int size; //数组长度
private E[] data; //声明泛型的数组
public ArrayList() {
size = 0; //初始化数组长度为0
data = (E[]) (new Object[1]);//初始化数组 包含一个null对象
}
public void add(E target) {
if (isFull()) {
stentch(); //判断数组是否满 如果满复制原数组到新的数组
}
data[size] = target; //增加一条内容
size++;
}
public E get(int index) { //根据索引获得item
return data[index];
}
public void set(int index, E target) {//修改数组内容
data[index] = target;
}
public int size() {//查询数组长度
return size;
}
public void stentch() {//复制数组 扩大两倍的方法
E[] newData = (E[]) (new Object[data.length]);
for (int i = 0; i < data.length; i++) {
newData[i] = data[i];
}
data = newData;
}
public boolean isFull() {//判断数组是否满
return size == data.length;
}
public boolean isEmpty() {//判断数组是否为空
return size == 0;
}
public boolean contains(E target){ //查询数组是否包含
for(int i=0;i<size;i++){
if( data[i].equals(target)){
return true;
}
}
return false;
}
public String toString(){ //打印数组 重写了toString
String result="[ ";
for(int i=0;i<size;i++){
result+=data[i]+" ";
}
return result+" ";
}
public E remove(int index){
E result=data[index];//把索引对应的item存放在result
for(int i=index+1;i<size;i++){//删除数组 为了防止发生越界错误 用i<index约束
data[i-1]=data[i];
}
size--;//
return result;
}
public boolean remove(E target){//删除第一个target
for(int i=0;i<size;i++){
if( data[i].equals(target)){
remove(i);//
return true;
}
}
size--;//删除后长度要减少1
return false;
}
}