数据结构(java)----MyArrayList

来源:互联网 发布:网络增值业务许可证 编辑:程序博客网 时间:2024/06/11 03:29

最近看的书叫“数据结构与算法分析,java语言描述”,里面有讲到各种数据结构的实现。今天先写出最简单的一部分,ArrayList的实现

import java.util.Iterator;public class MyArrayList<T> implements Iterable<T>{    private static final int DEFAULT_CAPACIY = 10;    private int theSize;    private T[] theItems;    public MyArrayList(){doClear();}    public void clear(){doClear();}    public void doClear(){theSize = 0 ; ensureCapacity(DEFAULT_CAPACIY);}    public int size(){ return theSize;}    public boolean isEmpty(){return theSize == 0;}    public void trimToSize(){ensureCapacity(size());}//删除掉没有用的剩余空间,只把有用的部分留下来    public T get(int idx){        if(idx < 0 || idx >=size())            throw new ArrayIndexOutOfBoundsException();        return theItems[idx];    }    public T set(int idx, T newVal){        if(idx < 0 || idx >=size())            throw new ArrayIndexOutOfBoundsException();        T old = theItems[idx];        theItems[idx] = newVal;        return old;    }    public void ensureCapacity(int newCapacity){//对list进行扩充,满足动态性        if(newCapacity < size())            return;        T[] old = theItems;        theItems = (T[])new Object[newCapacity];        for(int i = 0 ; i < size(); i++)            theItems[i] = old[i];    }    public boolean add(T x){add(size(),x);return true;}    public void add(int idx,T x){        if(theItems.length==size()){ensureCapacity(size()*2+1);}        for(int i = theSize; i > idx ; i++)            theItems[i] = theItems[i-1];        theItems[idx] = x;        theSize++;    }    public T remove(int idx){        T removeItem = theItems[idx];        for(int i = idx ; i < theSize ; i++)            theItems[i] = theItems[i+1];        theSize--;        return removeItem;    }    @Override    public Iterator<T> iterator() {        // TODO Auto-generated method stub        return new ArrayListIterator();    }    //用常规内部类构造出一个迭代器    private class ArrayListIterator implements Iterator<T>    {        private int current = 0;        @Override        public boolean hasNext() {            // TODO Auto-generated method stub            return current < theSize;        }        @Override        public T next() {            // TODO Auto-generated method stub            if(!hasNext())                throw new ArrayIndexOutOfBoundsException();            return theItems[current++];        }        @Override        public void remove() {            // TODO Auto-generated method stub            MyArrayList.this.remove(--current);        }    }}
0 0