java deque与queue_2.10 Java中Queue和Deque接口

2.10.1 什么是Queue

正如数据结构中描述,queue是一种先进先出的数据结构,也就是first in first out。可以将queue看作一个只可以从某一段放元素进去的一个容器,取元素只能从另一端取,整个机制如下图所示,不过需要注意的是,队列并没有规定是从哪一端插入,从哪一段取出。

b4d2942bb901667ab2b048c16b16c66a.png

2.10.2 什么是Deque

Deque英文全称是Double ended queue,也就是俗称的双端队列。就是说对于这个队列容器,既可以从头部插入也可以从尾部插入,既可以从头部获取,也可以从尾部获取,其机制如下图所示。

332a40118cfc5070a61143d9e1c0258a.png

2.10.3 Java中的Queue接口

此处需要注意,Java中的队列明确有从尾部插入,头部取出,所以Java中queue的实现都是从头部取出。

package java.util;

public interface Queue extends Collection {

//集合中插入元素

boolean add(E e);

//队列中插入元素

boolean offer(E e);

//移除元素,当集合为空,抛出异常

E remove();

//移除队列头部元素并返回,如果为空,返回null

E poll();

//查询集合第一个元素,如果为空,抛出异常

E element();

//查询队列中第一个元素,如果为空,返回null

E peek();

}

Queue接口方法

作用

boolean offer(E e)

往队列中插入元素

E poll()

队列中移除元素,并返回该元素

E peek()

获取队列头部元素,但不做修改

Java queue常常使用的方法如表格所示,对于表格中接口和表格中没有的接口方法区别为:队列的操作不会因为队列为空抛出异常,而集合的操作是队列为空抛出异常。

2.10.4 Deque接口

package java.util;

public interface Deque extends Queue {

//deque的操作方法

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();

boolean removeFirstOccurrence(Object o);

boolean removeLastOccurrence(Object o);

// *** Queue methods ***

boolean add(E e);

boolean offer(E e);

E remove();

E poll();

E element();

E peek();

// 省略一堆stack接口方法和collection接口方法

}

和Queue中的方法一样,方法名多了First或者Last,First结尾的方法即从头部进行操作,Last即从尾部进行操作。

2.10.5 Queue,Deque的实现类

Java中关于Queue的实现主要用的是双端队列,毕竟操作更加方便自由,Queue的实现有PriorityQueue,Deque在java.util中主要有ArrayDeque和LinkedList两个实现类,两者一个是基于数组的实现,一个是基于链表的实现。在之前LinkedList文章中也提到过其是一个双向链表,在此基础之上实现了Deque接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值