一、什么是队列?
百度百科中的解释,队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
二、队列的特征:
FIFO:(First In First Out)先进先出的一种线性数据结构。线性即有序,而队列的排序规则就是入队的自然排序顺序。
三、JDK中的队列:
JDK中对Queue的描述概括为一句话:一种存放element的集合,对于集合中的element可以提供具有优先级的处理。
具体的类继承关系如下图:
四、JDK中队列的特性:
简单来说,Queue就是一个集合,所以在JDK中,Queue接口继承了Collection接口,因此Queue具有集合的基本特性。除了具有集合的基本特征之外,Queue还提供了其特有的其他插入、提取和检查操作,具体与集合中的基本操作的关系和区别可以概括为两方面:
a、集合中的基本操作,add(e)、remove()和element()方法在操作失败时会抛出异常;
b、Queue提供的特有的操作offer(e)、poll()和peek()则根据具体的不同操作返回null或者false;
提供的具体方法如下图:
五、JDK中队列中提供的API:
1、add(E e) / offer(E e):
都是在队尾插入一个不为null的element,不同之处在于add在插入失败的时候会抛出异常,而offer会返回false;
offer方法的使用场景在于插入失败是一种正常情况而不用抛出异常时,比如固定容量的队列中;
2、remove() / poll():
都是从队首取出一个element,不同之处在于remove在队列为空时会抛出异常,而poll会返回null;
3、element() / peek():
功能上与remove()/poll()相同,不同的是只拿到队首的element,但是不取出,即队首的element依然存在;