跳转至

队列

1564367563092

先进先出 ;

1564367829465

队列的出现是为了解决资源紧张的问题 ;

解决的是数据缓冲的问题 ;

Queue 接口

Queue 是队列实现的标准的操作接口 , 在这个接口里面提供有如下的队列操作方法 .

方法 释义
boolean add(e) 增加队列数据 , 会抛出异常 : 非法状态异常
boolean offer(e) 追加成功返回true
E remove() 抛出异常
E poll() 返回指定内容

实现类

LinkedList

1564384244604

范例 :

Queue<String> queue = new LinkedList<>();
queue.offer("j");
queue.offer("a");
queue.offer("v");
queue.offer("a");
while (!queue.isEmpty()){
    System.out.print(queue.poll());
}

结果 :

java

由此发现 , 先进先出

PriorityQueue

1564384451529

范例 :

Queue<String> queue = new PriorityQueue<>();
queue.offer("j");
queue.offer("a");
queue.offer("v");
queue.offer("a");
while (!queue.isEmpty()){
    System.out.print(queue.poll());
}

结果 :

aajv

此时的数据将进行排序 , 将排序的内容依次输出

Deque 接口

它实现的数据 , 是一个双向操作 , 可以从队首添加获取 , 也可以从队尾添加获取

LinkedList

见上

ArrayDeque

1564385062264

使用Deque的时候肯定有 Queue的方法 , 还增加了如下方法 :

上述十二种方法总结在下表中:

第一元素(头) 第一元素(头) 最后元素(尾巴) 最后元素(尾巴)
引发异常 特殊价值 引发异常 特殊价值
插入 addFirst(e) offerFirst(e) addLast(e) offerLast(e)
去掉 removeFirst() pollFirst() removeLast() pollLast()
检查 getFirst() peekFirst() getLast() peekLast()

该接口扩展了Queue接口。当deque用作队列时,会产生FIFO(先进先出)行为。元素在双端队列的末尾添加并从头开始删除。从Queue接口继承的Deque方法与下表中指示的方法完全等效 :

Queue 方法 等效Deque方法
add(e) addLast(e)
offer(e) offerLast(e)
remove() removeFirst()
poll() pollFirst()
element() getFirst()
peek() peekFirst()

Deques也可以用作LIFO(后进先出)堆栈。应优先使用此接口,而不是遗留Stack类。当deque用作堆栈时,元素将从双端队列的开头推出并弹出。堆栈方法等同Deque 于下表中指示的方法:

堆栈方法 等效Deque方法
push(e) addFirst(e)
pop() removeFirst()
peek() getFirst()

注意,peek当deque用作队列或堆栈时,该方法同样有效; 在任何一种情况下,元素都是从双端队列的开头绘制的。

Deque deque = new ArrayDeque();
deque.offerFirst("first");
deque.offerLast("last");
deque.offerLast("lastEnd");
while (!deque.isEmpty()){
    System.out.println(deque.poll());
}

结果

first
last
lastEnd

以上利用了 poll 对数据进行取出 , 实际上就是从头开始进行消费处理