类介绍
Queue
,直接翻译过来就是队列的意思。和大一的数据结构一样,就是一种一头进、另一头出的数据结构。
敏感点:
- 队列不都是FIFO,队列可以定制排序方式,实现每次把最大/最小的元素放队头然后取出
- 队列有些特殊的规定,取队头和出队列时返回
null
则表示队空了,所以**Queue
不支持null
的存取 - 这个不是线程安全的,线程安全的参见
BlockingQueue
接口分析对比
队列的操作只有三种:进队、出队、取队头。
队列根据自己的情况继承了Collection
的add
方法作为进队。修改了Collection
的remove
方法的入参作为出队。然后自己新定义了一个方法作为取队头。
对列因为很多的应用场景要频繁的进行修改(就像栈要不停的入栈出栈一样)。所以提供了两类方法:
- 第一类是
Collection
流派:如果对集合修改成功,那么ok;如果修改失败则该抛异常就抛异常,该返回false啥的就按规定走 - 第二类是
Queue
自己的风格:因为要频繁的修盖,老是抛出异常,每次都给try-catch
,所以就干脆定义一些返回的值为无意义的,比如入队时返回false
,比如取队头和出队列时返回null
。【正好呼应上边的话】
接下来主要对重要的接口进行介绍
Collection
风格的方法
boolean add(E e);
这个和Collection
一样,注意这个方法根据各自的编码不同,是可以抛出异常的,比如ClassCastException
,NullPointerException
,IllegalArgumentException
。
E remove();
这个在Collection
的基础上进行了一些修改,取消了入参。毕竟每次都是从队头取。会抛出NoSuchElementException
(队列为空时抛出)
E element();
去队头,队列为空时抛出NoSuchElementException
Queue
风格的方法
boolean offer(E e);
本来Queue
是不打算抛出异常或者少抛出异常的,但是毕竟是插入,总会有非法参数,所以也可以抛出异常:ClassCastException
,NullPointerException
,IllegalArgumentException
。
但是在正常使用时一般靠返回的boolean
判断入队是否成功。
E poll();
出队列,返回null
表示队列空。不抛出异常。
E peek();
取队头,返回null
表示队列空。不抛出异常。
网友评论