ArrayDeque的常用方法,自己模仿ArrayDeque

第一次写文章,这是我看java源代码自己模仿写的ArrayDeque,就当做对自己的一次复习吧,希望对你们有所帮助,代码有什么错的地方

还请见谅 代码如下

 


public class MyArrayDeque<E> {
    private Object[] elements;
    private int head;//头部下标 始终未0;
    private int tail=-1;//尾部下标(集合最后一个值的下标);
    private int size;
    public MyArrayDeque() {
        elements =new Object[16];
    }
    
    public boolean add(E e) {
        addLast(e);
        return true;
    }
    
    public void addLast(E e) {
        if(e==null)
            throw new NoSuchElementException();
        group(size+1);
        elements[++tail] =e;
        size++;
    }
    
    public void addFirst(E e) {
        if(e ==null) 
            throw new NoSuchElementException();
        group(size+1);
        System.arraycopy(elements, head, elements, head+1, size);
        elements[head]=e;
        size++;
        tail++;
    }
    
    private void group(int size) {
        if(size>16) {
            DoubleGroup();
        }
    }
    
    private void DoubleGroup() {
        size =size*2;
        elements =Arrays.copyOf(elements, size);
    }
    
    public E getFirst() {
        E e =(E)elements[head];
        if(e==null)
            throw new NoSuchElementException();
        return e;
    }
    
    public E getLast() {
        E e =(E)elements[tail];
        if(e==null)
            throw new NoSuchElementException();
        return e;
    }
    
    public E peek() {
        return peekFirst();
    }
    
    public E peekFirst() {
        return (E)elements[head];
    }
    
    public E peekLast() {
        return (E)elements[tail];
    }
    
    public E poll() {
        return pollFirst();
    }
    
    public E pollFirst() {
        if(elements[head]==null)
            return null;
        
        E e =(E)elements[head];
        System.arraycopy(elements, head+1, elements, 0, size-1);
    
        elements[tail--] =null;
        size--;
        return e;
    }
    
    public E pollLast() {
        if(elements[tail]==null)
            return null;
        
        E e =(E)elements[tail];
        
        elements[tail--] =null;
        size--;
        return e;
    }
    
    public boolean offer(E e) {
        offerLast(e);
        return true;
    }
    
    public boolean offerFirst(E e) {
        addFirst(e);
        return true;
    }
    
    public boolean offerLast(E e) {
        addLast(e);
        return true;
    }
    
    public E remove(E e) {
        
        return removeFirst(e);
    }
    
    public E removeFirst(E e) {
        E x =pollFirst();
        if(x==null) 
            throw new NoSuchElementException();
        return x;
    }
    public E removeLast(E e) {
        E x =pollLast();
        if(x==null) 
            throw new NoSuchElementException();
        return x;
    }
    
}
 

 

 

/*ArrayDeque中常用方法
     * add() 在集合后面添加值  底层调用addLast()方法
     * addFirst(Object) 在集合最前面添加值
     * addLast(Object)  在集合最后面添加值
     * addAll(Collection) 添加传入集合的值
     * 
     * clear() 清空集合
     * contains(Object) 判断集合中是否有传入对象
     * 
     * getFirst() 得到集合中最前面的值 没有值抛出NoSuchElementException
     * getLast() 得到集合中最后面的值 没有值抛出NoSuchElementException
     * 
     * peek() 得到这个集合第一个值 底层调用peekFirst();不删除 值 没有值返回空 不会抛出异常
     * peekFirst() 得到这个集合第一个值  不删除值 没有值返回空 不会抛出异常
     * peekLast() 得到这个集合最后一个值  不删除值   没有返回空 部抛出异常
     * 
     * poll() 得到这个集合第一个值 底层调用pookFirst();并删除 值 没有值返回空 不会抛出异常
     * pollFirst() 得到这个集合第一个值  并删除值 没有值返回空 不会抛出异常
     * pollLast() 得到这个集合最后一个值 并删除值   没有返回空 部抛出异常
     * 
     * push() 在集合最前面添加值 底层调用 addFirst();
     * 
     * offer()在集合最后面添加值 底层调用offerLast();
     * offerFirst()在集合前面添加值  底层调用addFirst();
     * offerLast() 在集合最后面添加值 底层调用addLast();
     * 
     * remove() 返回并删除集合最前面的值 底层调用removeFirst()
     * removeFirst() 返回并删除集合最前面的值底层调用pollFirst()删除第一个值 然后判断是否为空 为空抛出NoSuchElementException
     * reoiveLast() 返回并删除集合最后面的值 底层调用pollLast()删除最后一个值 然后判断是否为空 为空抛出NoSuchElementException
     * removeFirstOccurrencte() 返回当你调用removeFirst()时是否能正确执行的boolean类型
     * removeLasttOccurrencte() 返回当你调用removeLast()时是否能正确执行的boolean类型
     * */

 

感谢观看

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值