Java数据结构--List

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;
    }
}
posted @ 2016-02-23 20:54  Salaku  阅读(312)  评论(0编辑  收藏  举报