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

最近看的书叫“数据结构与算法分析,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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值