java集合数据结构实现

来源:互联网 发布:2016淘宝双11成交额 编辑:程序博客网 时间:2024/05/25 18:09

                  自定义集合类和java数据结构底层的实现

      对ArrayList的实现,实际就是动态数组  代码分析package cn.itcast.shujujiegou;

package cn.itcast.shujujiegou;import java.util.Iterator;/** * Created by likailong on 2016/9/27. */public class MyArrayList<T > implements Iterable<T> {    private static final int DEFAULT_SIZE=10;    private int theSize;    private T [] theItems;    public MyArrayList(){        doClear();    }    public void clear(){        doClear();    }    private void doClear() {        theSize=0;        ensureCapacity(DEFAULT_SIZE);    }    public void trimToSize(){        ensureCapacity(size());    }    public T get(int index){        if(index<0||index>=size())            throw new IndexOutOfBoundsException("数组脚标越界");        return theItems[index];    }    public T set(int index,T element){        if(index<0||index>=size())            throw new IndexOutOfBoundsException("数组脚标越界");        T old=theItems[index];        theItems[index]=element;        return old;    }    public boolean add(T element){        add(size(),element);        return true;    }    public void add(int index,T element){        if(theItems.length==size())            ensureCapacity(size()*2+1);        for(int i=size();i>index;i--){            theItems[i]=theItems[i-1];        }        theItems[index]=element;        theSize++;    }    public T remove(int index){        T remove=theItems[index];        for(int i=index;i<size()-1;i++)            theItems[i]=theItems[i+1];        theSize--;        return remove;    }    public void ensureCapacity(int newCapacity) {        if(newCapacity<theSize)            return ;        T [] old=theItems;        theItems=(T[])new Object[newCapacity];        for(int i=0;i<size();i++)            theItems[i]=old[i];    }    public String toString(){        StringBuilder s=new StringBuilder();        s.append("[");        for(int i=0;i<theSize;i++){            s.append(","+theItems[i]);        }        s.append("]");        return s.toString();    }    public  int size() {        return theSize;    }   public boolean isEmpty(){       return size()==0;   }    @Override    public Iterator<T> iterator() {        return new ArrayListLiterator();    }    private class ArrayListLiterator implements Iterator<T>{       private int current=0;        @Override        public boolean hasNext() {            return current<size();        }        @Override        public T next() {            return theItems[current++];        }        public void remove(){            MyArrayList.this.remove(--current);        }    }}


      


1 0
原创粉丝点击