Queue, Deque ,ArrayDeque

继承体系:

 

 Queue

是队列的顶级接口,关注三个方法:

boolean offer(E e);  ---入队
E poll();            ---队首元素出队并删除,队列为空则返回null
E peek();            ---获取队首元素但不删除,队列为空则返回null

翻译一下类注释的几个关键讲解:

队列结构典型的但不是必须的,处理元素顺序的方式是FIFO,有2个例外:

priorityQueue,依据提供的comparator或者元素的自然顺序对元素排序

LIFO  queue,就是将队列作为Stack使用时

不管是哪种排序方式,remove()和poll()方法永远是删除的队首元素

对于FIFO queue,新元素一定是插入到队尾

队列的实现类必须定义元素的排序方式

offer方法设计为当插入失败时返回false,而不是抛出异常,比如fixed-capacity 或者bounded queues

BlockingQueue也是Queue的一个实现类,但是Queue没有定义BlockingQueue的方法

通常情况下,Queue要求不允许插入null值,这是因为null作为一些方法的特殊返回值,比如poll和peek

通常情况下,Queue不会定义基于元素的equals和hashCode方法,代之的是直接继承元素类型的父类Object的equals和hashCode方法

因为基于元素自身重写的equals方法并不能很好的定义“相同元素但顺序不同”时的情形

Deque

双端队列

Queue的一个子类,是一个接口,双端对队列的实现类代表:基于链表实现的LinkedList,基于数组实现的ArrayQueue

以下是关于队首和队尾的12个操作方法,红线划掉的不需要关注

 

 Deque也可以作为Stack使用,并且在选择时应优先于Stack类使用(Stack类是遗留类)

当作为Stack使用时,操作都是在队首(first),对应的等价方法如下:

 

 ArrayDeque

 

 

posted @ 2022-09-16 17:37  鼠标的博客  阅读(95)  评论(0编辑  收藏  举报