Queue 和 Deque

一、Queue接口的描述

Queue接口,实现了 Collection接口。

队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

在Queue中,有 offer、add、poll、remove、peek、element六个方法 

public interface Queue<E> extends Collection<E> {

	boolean add(E e);
	
    boolean offer(E e);

	E remove();

	E poll();

	E element();

	E peek();
}

二、offer/add函数,poll/remove函数,peek/element函数的区别

1、offer函数和add函数的区别
一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。

这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。

2、poll函数和remove函数的区别

remove() 和 poll() 方法都是从队列中删除第一个元素。remove() 的行为与 Collection 接口的版本相似

但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此新的方法更适合容易出现异常条件的情况。

3、peek函数和element函数的区别

element() 和 peek() 用于在队列的头部查询元素。
与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null。

二、Deque接口的描述

Deque接口继承了Queue接口。官方文档推荐用Deque实现栈(stack)。

Deque<E> stack = new LinkedList<E>();

线性集合,支持两端的元素插入和移除。Deque是double ended queue的简称,习惯上称之为双端队列。大多数Deque 实现对它们可能包含的元素的数量没有固定的限制,但是该接口支持容量限制的deques以及没有固定大小限制的deque。

public interface Deque<E> extends Queue<E> {
    //移除第一个出现对象o的元素
    boolean removeFirstOccurrence(Object o);
    //移除最后一个出现对象o的元素
    boolean removeLastOccurrence(Object o);
    //返回逆序迭代器
    Iterator<E> descendingIterator();
    
    //用作栈
    void push(E e);
    E pop();

	//跟Queue一样的增删和判断是否有元素的方法
    void addFirst(E e);
    void addLast(E e);
    boolean offerFirst(E e);
    boolean offerLast(E e);
    E removeFirst();
    E removeLast();
    E pollFirst();
    E pollLast();
    E getFirst();
    E getLast();
    E peekFirst();
    E peekLast();

	//继承Queue的方法
 	boolean add(E e);
    boolean offer(E e);
    E remove();
    E poll();
    E element();
    E peek();
    
    //继承Collection的方法
    boolean remove(Object o);
    boolean contains(Object o);
    public int size();
    
    //继承Iterable的方法
    Iterator<E> iterator();
}
  • addFirst(): 向队头插入元素,如果元素为空,则发生NPE(空指针异常)
  • addLast(): 向队尾插入元素,如果为空,则发生NPE
  • offerFirst(): 向队头插入元素,如果插入成功返回true,否则返回false
  • offerLast(): 向队尾插入元素,如果插入成功返回true,否则返回false
  • removeFirst(): 返回并移除队头元素,如果该元素是null,则发生NoSuchElementException
  • removeLast(): 返回并移除队尾元素,如果该元素是null,则发生NoSuchElementException
  • pollFirst(): 返回并移除队头元素,如果队列无元素,则返回null
  • pollLast(): 返回并移除队尾元素,如果队列无元素,则返回null
  • getFirst(): 获取队头元素但不移除,如果队列无元素,则发生NoSuchElementException
  • getLast(): 获取队尾元素但不移除,如果队列无元素,则发生NoSuchElementException
  • peekFirst(): 获取队头元素但不移除,如果队列无元素,则返回null
  • peekLast(): 获取队尾元素但不移除,如果队列无元素,则返回null
  • pop(): 弹出栈中元素,也就是返回并移除队头元素,等价于removeFirst(),如果队列无元素,则发生NoSuchElementException
  • push(): 向栈中压入元素,也就是向队头增加元素,等价于addFirst(),如果元素为null,则发生NPE,如果栈空间受到限制,则发生IllegalStateException
     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值