应用场景
先进先出。只要是排队的场景,都适用。即先到先得。先来的数据,先处理。
数据结构
队列是一种抽象数据结构,可以基于数组和链表实现。
实现
基于数组实现
缺点
1.需要初始化大小。
2.在插入数据和删除数据的过程当中,有可能,头指针指向了数组后面的索引,导致的结果就是,数组只使用了少数几个数据,其他空间都浪费掉了。
示意图
基于链表实现
链表就没有数组的缺点。
数据大小
最佳实践,一般来说,栈和队列的数据量都比较小。适合少量数据。
jdk
jdk-util包
没有队列的实现,只有双端队列的实现。
那么什么是双端队列?
就是头结点和尾节点,都可以插入数据和删除数据。非双端队列,只能头结点删除数据,尾节点插入数据。
类
1.数组双端队列 //ArrayDeque
2.链表双端队列 //LinkedList
jdk-并发包
只有并发链表队列。没有并发数组队列,因为数组有缺点。
类
1.非阻塞队列
并发链表队列 //ConcurrencyLinkedQueue
2.阻塞队列
数组阻塞队列 //ArrayBlockingQueue。有界队列。
链表阻塞队列 //LinkedBlockingQueue。无界;当然,也可以设置为有界。
最佳实践
并发链表队列和链表阻塞队列使用的比较多。1.因为排队的场景,非常多;2.而且,有时候,需要阻塞功能。
比如,支付里,1.支付功能,用到了并发链表队列 2.实名认证功能,用到了链表阻塞队列。
参考
各种数据结构的书