队列概述java

队列的基本概念

队列(Queue)是一种先进先出(FIFO, First-In-First-Out)的线性数据结构,元素从队尾(rear)插入,从队头(front)删除。Java中队列通常通过java.util.Queue接口实现,常见实现类包括LinkedListArrayDequePriorityQueue

队列的核心操作

1. 插入元素

  • add(E e):将元素插入队尾,若队列满则抛出异常。
  • offer(E e):将元素插入队尾,队列满时返回false

2. 删除元素

  • remove():移除并返回队头元素,队列空时抛出异常。
  • poll():移除并返回队头元素,队列空时返回null

3. 查看队头元素

  • element():返回队头元素但不移除,队列空时抛出异常。
  • peek():返回队头元素但不移除,队列空时返回null

队列的实现类示例

LinkedList(链表实现)
Queue<Integer> queue = new LinkedList<>();
queue.offer(10); // 插入元素
queue.offer(20);
int head = queue.poll(); // 移除并返回队头元素
System.out.println(head); // 输出: 10

ArrayDeque(数组实现)
Queue<String> deque = new ArrayDeque<>();
deque.add("A");
deque.add("B");
String first = deque.peek(); // 查看队头元素
System.out.println(first); // 输出: A

PriorityQueue(优先队列)

优先队列根据元素的优先级(自然顺序或自定义比较器)出队:

Queue<Integer> pq = new PriorityQueue<>();
pq.offer(30);
pq.offer(10);
pq.offer(20);
while (!pq.isEmpty()) {
    System.out.println(pq.poll()); // 输出: 10, 20, 30(按升序)
}

线程安全队列

在多线程环境下可使用java.util.concurrent包中的线程安全队列:

  • BlockingQueue:支持阻塞操作(如LinkedBlockingQueue)。
  • ConcurrentLinkedQueue:非阻塞的高并发队列。
BlockingQueue<Integer> bq = new LinkedBlockingQueue<>(5);
bq.put(1); // 阻塞插入(队列满时等待)
int value = bq.take(); // 阻塞移除(队列空时等待)

应用场景

  • 任务调度(如线程池任务队列)。
  • 广度优先搜索(BFS)算法。
  • 消息队列(如生产者-消费者模型)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值