JAVA队列

非阻塞队列

  • PriorityQueue 类实质上维护了一个有序列表
  • ConcurrentLinkedQueue 是基于链接节点的、线程安全的队列

阻塞队列

  • DelayQueue :一个由优先级堆支持的、基于时间的调度队列
  • SynchronousQueue :一个利用 BlockingQueue 接口的简单聚集(rendezvous)机制
  • PriorityBlockingQueue :一个由优先级堆支持的无界优先级队列
  • LinkedBlockingQueue :一个由链接节点支持的可选有界队列
  • ArrayBlockingQueue :一个由数组支持的有界队列

在这里插入图片描述

Java队列是一种线性数据结构,特点是先进先出(FIFO)。元素的添加(入队)操作在队尾进行,元素的移除(出队)操作在队头进行,队列接口继承自Collection接口,并提供了丰富的方法来操作队列中的元素[^1]。 ### 特性 - **顺序**:遵循FIFO(先进先出)原则,先进入队列的元素先出队。与之对比,栈遵循LIFO(后进先出)原则[^1][^3]。 - **插入和删除端**:插入操作在队尾进行,删除操作在队头进行。而栈的插入和删除操作都在栈顶进行[^3]。 - **阻塞特性**:阻塞队列是 `java.util.concurrent` 包下的,当队列满时,插入操作会阻塞;当队列空时,移除操作会阻塞,使用时需要导包,如 `import java.util.concurrent.ArrayBlockingQueue;` 等[^4]。 ### 使用方法 #### 基本队列操作 ```java import java.util.LinkedList; import java.util.Queue; public class QueueExample { public static void main(String[] args) { Queue<String> queue = new LinkedList<>(); // 入队操作 queue.add("element1"); queue.offer("element2"); // 出队操作 String firstElement = queue.poll(); String secondElement = queue.remove(); // 查看队头元素 String peekElement = queue.peek(); String element = queue.element(); } } ``` #### 双端队列操作 ```java import java.util.Deque; import java.util.ArrayDeque; public class DequeExample { public static void main(String[] args) { Deque<String> deque = new ArrayDeque<>(); // 队头插入 deque.addFirst("front"); // 队尾插入 deque.addLast("end"); // 队头移除 String frontElement = deque.removeFirst(); // 队尾移除 String endElement = deque.removeLast(); } } ``` #### 阻塞队列操作 ```java import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; public class BlockingQueueExample { public static void main(String[] args) throws InterruptedException { BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<>(10); // 入队操作,队列满时会阻塞 blockingQueue.put("element"); // 出队操作,队列空时会阻塞 String element = blockingQueue.take(); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值