一、Queue集合
Queue用于模拟队列这种数据结构,队列的特点是“先进先出”(FIFO)。队列的头部保存在队列中存放时间最长的元素,队列的尾部保存在队列中存放时间最短的元素。新元素插入(offer)到队列的尾部,访问元素(poll)操作会返回队列头部的元素。通常,队列不允许随机访问队列中的元素。
(一)PriorityQueue实现类
PriorityQueue保存队列元素的顺序并不是按加入队列的顺序,而是按队列元素的大小进行排序。因此当调用peek()方法或者poll()方法取出队列时,并不是取出最先进入队列的元素,而是取出队列中最小的元素。
//定义一个PriorityQueue类型的队列,并依次加入6,-3,20
PriorityQueue pq = new PriorityQueue();
pq.offer(6);
pq.offer(-3);
pq.offer(20);
//访问队列中的第一个元素,输出最小的元素-3
System.out.println(a.poll());
PriorityQueue不允许插入null元素,它还需要对队列元素进行排序,有两种排序方式
- 自然排序:采用自然排序的PriorityQueue集合中的元素必须实现了Comparable接口,而且应该是同一个类的多个实例,否则可能导致ClassCastException异常。
- 定制排序:创建PriorityQueue队列时,传入一个Comparator对象,该对象负责队列中的所有元素进行排序。采用定制排序时不要求队列元素实现Comparable接口。
(二)Deque接口与ArrayDeque实现类
Deque代表一个双端队列,特点是允许从两端来操作队列的元素。Deque不仅可以当成双端队列使用,而且可以被当成栈来使用,因为该类里还包含了pop(出栈)、push(入栈)两个方法。
Deque接口提供了一个典型的实现类,ArrayDeque。它是一个基于数组实现的双端队列,其可以作为栈来使用,也可以作为队列来使用。
//作为栈使用,先进后出
public class ArrayDequeStack{
public static void main(String[] args)
{
ArrayDeque stack=new ArrayDeque();
//将三个元素push入“栈”
stack.push("绿色");