欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > > 文章正文

用数组实现ArrayList,数组实现ArrayList

来源: javaer 分享于  点击 48187 次 点评:247

用数组实现ArrayList,数组实现ArrayList


1.使用数组实现ArrayListpackage com.briup.collection;//使用数组实现public class ArrayList implements List {    private Object[] elements;//数组    private int length; //数据的长度    private int size //当前元素的个数   public ArrayList() {       elements = new Object[10];//创建一个长度为10的数组        this.length=10;    }   public ArrayList(int length){       elements = new Object[length];//创建一个长度为length的数组       this.length=length;   }    //创建检查空间是否足够的方法   public void ensureCap(){       if (size>=length) {         Object[] array=new Object[length+10];         System.arraycopy(elements, 0, array, 0, size);           elements=array;//把新数组赋值给旧数组         length=length+10;//数组的长度增加10         }   }    @Override      //向指定位置添加元素    public void add(int index, Object obj) {         if(index<0 || index>size)return;         //空间是否足够         ensureCap();         for (int i = size; i > index; i--) {            elements[i]=elements[i-1];//把前一个值赋给后一个值                    }         elements[index] = obj;         size++;    }    @Override    public void add(Object obj) {         add(size,obj);    }    @Override    //删除元素    public Object remove(int index) {        if(index<0 || index>=size)            return null;        Object obj = elements[index];         for (int i = index; i < size-1; i++) {           elements[i]=elements[i+1];//把后一个值赋给前一个值          }          size--;         elements[size]=null;//把最后一个数据赋值为null1         return obj;    }    @Override//  设置某个位置的数据    public void set(int index, Object obj) {      if(index<0 || index >= size)return;       elements[index]=obj;    }    @Override//  获取数据    public Object get(int index) {         if(index<0 || index >= size)return null;                return elements[index];    }    //获取数据的长度    @Override    public int size() {        return size;    }    @Override    public Iterator iterator() {        return new Iterator(){            //当前位置            private int position=-1;            public boolean hasNext() {                if(position+1<size)                return true;            return false;            }            @Override            public Object next() {                return get(++position);            }            @Override            public Object remove() {                                return ArrayList.this.remove(position--);            }         };    }  }
2.使用链表实现LinkedListpackage com.briup.collection;//使用链表实现public class LinkedList implements List {   private Node head;//头结点   private int size;//当前数据的个数   public LinkedList() {     head = new Node();   }    @Override    public void add(int index, Object obj) {        if(index<0 || index > size) return;            Node curr = head;//当前节点        for(int i=0;i<index;i++){            curr = curr.next; //  下一个节点作为当前节点。        }        Node node = new Node(obj);        node.next = curr.next;        curr.next = node;        size++;    }    @Override    public void add(Object obj) {           add(size,obj);           }    @Override    public Object remove(int index) {        if(index<0||index>=size)            return null;        Node curr =head;//当前节点        Node pre = null;        for (int i = 0; i <=index; i++) {            pre = curr;            curr = curr.next;        }        pre.next = curr.next;        curr.next = null;        size--;        return curr.getData();    }    @Override    public void set(int index, Object obj) {          if(index<0 || index>=size)               return;           Node curr = head;           for (int i = 0; i <= index; i++) {            curr =curr.next;        }         curr.setData(obj);    }    @Override    public Object get(int index) {       if(index<0 || index>=size)           return null;       Node curr = head;       for (int i = 0; i <= index; i++) {        curr =curr.next;    }        return curr.getData();    }    @Override    public int size() {        // TODO 自动生成的方法存根        return size;    }    @Override    public Iterator iterator() {        // TODO 自动生成的方法存根        return null;    } }

相关文章

    暂无相关文章

用户点评