Java 容器之 Queue
source link: https://dunwu.github.io/01.Java/01.JavaSE/03.%E5%AE%B9%E5%99%A8/05.Java%E5%AE%B9%E5%99%A8%E4%B9%8BQueue.html#%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
# Queue 简介
# Queue 接口
Queue
接口定义如下:
public interface Queue<E> extends Collection<E> {}
# AbstractQueue 抽象类
AbstractQueue
类提供 Queue
接口的核心实现,以最大限度地减少实现 Queue
接口所需的工作。
AbstractQueue
抽象类定义如下:
public abstract class AbstractQueue<E>
extends AbstractCollection<E>
implements Queue<E> {}
# Deque 接口
Deque 接口是 double ended queue 的缩写,即双端队列。Deque 继承 Queue 接口,并扩展支持在队列的两端插入和删除元素。
所以提供了特定的方法,如:
大多数的实现对元素的数量没有限制,但这个接口既支持有容量限制的 deque,也支持没有固定大小限制的。
# ArrayDeque
ArrayDeque
是 Deque
的顺序表实现。
ArrayDeque
用一个动态数组实现了栈和队列所需的所有操作。
# LinkedList
LinkedList
是 Deque
的链表实现。
public class LinkedListQueueDemo {
public static void main(String[] args) {
//add()和remove()方法在失败的时候会抛出异常(不推荐)
Queue<String> queue = new LinkedList<>();
queue.offer("a"); // 入队
queue.offer("b"); // 入队
queue.offer("c"); // 入队
for (String q : queue) {
System.out.println(q);
}
System.out.println("===");
System.out.println("poll=" + queue.poll()); // 出队
for (String q : queue) {
System.out.println(q);
}
System.out.println("===");
System.out.println("element=" + queue.element()); //返回第一个元素
for (String q : queue) {
System.out.println(q);
}
System.out.println("===");
System.out.println("peek=" + queue.peek()); //返回第一个元素
for (String q : queue) {
System.out.println(q);
}
}
}
# PriorityQueue
PriorityQueue
类定义如下:
public class PriorityQueue<E> extends AbstractQueue<E>
implements java.io.Serializable {}
PriorityQueue
要点:
PriorityQueue
实现了Serializable
,支持序列化。PriorityQueue
类是无界优先级队列。PriorityQueue
中的元素根据自然顺序或Comparator
提供的顺序排序。PriorityQueue
不接受 null 值元素。PriorityQueue
不是线程安全的。
# 参考资料
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK