1.用数组的方式实现列表

步骤:  

    第一步:先定义一个列表的接口,在接口里面定义关于列表的增删改查相关方法

public interface MyList {
    //新增一个元素
    void add(Object element);
    //删除相同元素
    void delete (Object element);
    //根据索引删除元素
    void delete (int index);
    //将指定索引位置的元素替换成新元素
    void update (int index ,Object newElement);
    //当前列表中是否含有target这个元素
    boolean  contains (Object target);
    //返回指定索引出的元素
    Object  at(int index);
    //查找element的索引,如果没有返回-1
    int  indexOf(Object e);
}

     第二步:创建一个MyArrayList类,实现MyList接口的方法

/**
 * 用顺序存储(数组)方式来实现列表
 * **/
public class MyArrayList implements MyList {
    private  Object[] elements; //真正存储元素的底层结构
    private  int size=0;    //元素的个数 //也可以指向空的位置
    private  int capacity=10;//容量
    //用户来指定容量
    public MyArrayList(int capacity) {
        this.capacity = capacity;
        elements = new Object[capacity];
    }
    //可以使用默认值容量
    public MyArrayList() {
        elements = new Object[capacity];
    }

    @Override
    public void add(Object element) {
        if(size==capacity){ //扩容
            capacity*=2;//增加一倍的容量
            Object[] newArray = new Object[capacity];//新建一个数组
            for(int i=0;i<size;i++){
                newArray[i]=elements[i];
            }
            elements = newArray;
        }
        elements[size]=element; //将需要存的元素添加到列表中
        size++;
    }
    @Override
    public void delete(Object element) {
        int index=indexOf(element);
        if(index>=0){
            delete(index);
        }else{
            System.out.println("删除失败");
        }
    }
    @Override
    public void delete(int index) {
        for (int i = index; i <size ; i++) {
            elements[i]=elements[i+1];
        }
        elements[elements.length-1]=null;
        size--;
    }
    @Override
    public void update(int index, Object newElement) {
        elements[index]=newElement;
    }

    @Override
    public boolean contains(Object target) {
        return  indexOf(target)>=0;
    }

    @Override
    public Object at(int index) {
        return elements[index];
    }

    @Override
    public int indexOf(Object e) {
        for (int i = 0; i <size; i++) {
            if (elements[i].equals(e)){
                return i;
            }
        }
        return -1;
    }
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder("[");
        for(int i=0;i<size;i++){
            sb.append(elements[i]+(i==size-1?"":","));
        }
        sb.append("]");
        return  sb.toString();
    }
}

     第三步:对MyArrayList进行测试

public class test {

    public static void main(String[] args) {
        MyArrayList list = new MyArrayList();
        System.out.println("-----增加元素测试-----");
        list.add("nike");
        list.add("addids");
        list.add("NB");
        list.add("NB");
        System.out.println(list);
        System.out.println("-----删除元素测试-----");
        list.delete(1);
        System.out.println("删除addids后输出:"+list);
        list.delete("NB");
        System.out.println("删除NB后输出:"+list);
        System.out.println("-----更改测试-----");
        list.update(1,"syx");
        System.out.println("更改scy为syx"+list);
        System.out.println("-----查找测试-----");
        boolean b=list.contains("nike");
        System.out.println("查找是否有nike  "+b);
        int index=list.indexOf("syx");
        System.out.println("查找syx的位置   "+index);
        Object a=list.at(0);
        System.out.println("查找第一个元素Nike   "+a);
    }

     第四步:测试结果

 

猜你喜欢

转载自www.cnblogs.com/songchengyu/p/12968343.html