java 队列

209 阅读1分钟

应用场景

先进先出。只要是排队的场景,都适用。即先到先得。先来的数据,先处理。

数据结构

队列是一种抽象数据结构,可以基于数组和链表实现。

实现

基于数组实现

缺点
1.需要初始化大小。

2.在插入数据和删除数据的过程当中,有可能,头指针指向了数组后面的索引,导致的结果就是,数组只使用了少数几个数据,其他空间都浪费掉了。

示意图

基于链表实现

链表就没有数组的缺点。

数据大小

最佳实践,一般来说,栈和队列的数据量都比较小。适合少量数据。

jdk

jdk-util包

没有队列的实现,只有双端队列的实现。


那么什么是双端队列?
就是头结点和尾节点,都可以插入数据和删除数据。非双端队列,只能头结点删除数据,尾节点插入数据。



1.数组双端队列 //ArrayDeque
2.链表双端队列 //LinkedList

jdk-并发包

只有并发链表队列。没有并发数组队列,因为数组有缺点。



1.非阻塞队列
并发链表队列 //ConcurrencyLinkedQueue

2.阻塞队列
数组阻塞队列 //ArrayBlockingQueue。有界队列。
链表阻塞队列 //LinkedBlockingQueue。无界;当然,也可以设置为有界。

最佳实践

并发链表队列和链表阻塞队列使用的比较多。1.因为排队的场景,非常多;2.而且,有时候,需要阻塞功能。

比如,支付里,1.支付功能,用到了并发链表队列 2.实名认证功能,用到了链表阻塞队列。

参考

各种数据结构的书

juejin.cn/post/684490…