总之
1.普通队列用链表构造,循环队列用数组构造!
2.常把LinkedList作为队列使用: Queue<> queue = new LinkedList<>();
基本概念
- 先进者先出
- 入队 enqueue();出队 dequeue()。
- 用数组实现的队列叫作顺序队列,用链表实现的队列叫作链式队列。
顺序队列
链式队列
循环队列(循环队列一般都用数组)
- 需要浪费一个存储空间
- 当队满时,(tail+1)%n=head
阻塞队列
这个时候有多个线程要对队列进行操作,就会存在线程安全问题。
实现线程安全的队列我们叫作并发队列。最简单直接的实现方式是直接在 enqueue()、dequeue() 方法上加锁(synchronized),但是锁粒度大并发度会比较低,同一时刻仅允许一个存或者取操作。(实际上,基于数组的循环队列,利用 CAS 原子操作,可以实现非常高效的并发队列。这也是循环队列比链式队列应用更加广泛的原因。)