当前位置:首页 > Java

java 队列如何使用

2026-03-25 08:19:21Java

Java 队列的基本使用

Java 提供了多种队列实现,主要通过 Queue 接口及其子接口(如 DequeBlockingQueue)和实现类(如 LinkedListArrayDequePriorityQueue)来完成队列操作。

队列的创建

使用 LinkedListArrayDeque 实现普通队列:

Queue<String> queue = new LinkedList<>();
Queue<Integer> priorityQueue = new PriorityQueue<>();

添加元素

使用 add()offer() 方法添加元素到队尾:

queue.add("A"); // 可能抛出异常
queue.offer("B"); // 返回布尔值表示是否成功

移除元素

使用 remove()poll() 方法移除队首元素:

String head1 = queue.remove(); // 队列为空时抛出异常
String head2 = queue.poll();   // 队列为空时返回 null

查看队首元素

使用 element()peek() 方法查看但不移除队首元素:

String peek1 = queue.element(); // 队列为空时抛出异常
String peek2 = queue.peek();    // 队列为空时返回 null

双端队列(Deque)的使用

Deque 支持从队列两端操作元素。

java 队列如何使用

创建双端队列

Deque<String> deque = new ArrayDeque<>();

添加元素

从队首或队尾添加元素:

deque.addFirst("A"); // 等效于 push()
deque.addLast("B");  // 等效于 add()
deque.offerFirst("C");
deque.offerLast("D");

移除元素

从队首或队尾移除元素:

String first = deque.removeFirst(); // 等效于 pop()
String last = deque.removeLast();
String firstPoll = deque.pollFirst();
String lastPoll = deque.pollLast();

查看元素

查看队首或队尾元素:

String firstElement = deque.getFirst();
String lastElement = deque.getLast();
String firstPeek = deque.peekFirst();
String lastPeek = deque.peekLast();

优先队列(PriorityQueue)的使用

优先队列根据元素的自然顺序或自定义比较器排序。

java 队列如何使用

创建优先队列

Queue<Integer> priorityQueue = new PriorityQueue<>();
// 自定义排序
Queue<Integer> customPriorityQueue = new PriorityQueue<>(Comparator.reverseOrder());

添加和移除元素

操作与普通队列一致,但出队顺序按优先级:

priorityQueue.offer(5);
priorityQueue.offer(1);
priorityQueue.offer(3);
System.out.println(priorityQueue.poll()); // 输出 1

阻塞队列(BlockingQueue)的使用

BlockingQueue 常用于多线程场景,如 ArrayBlockingQueueLinkedBlockingQueue

创建阻塞队列

BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<>(10);

线程安全操作

使用 put()take() 实现阻塞式操作:

// 生产者线程
blockingQueue.put("Task");

// 消费者线程
String task = blockingQueue.take();

队列的遍历

使用迭代器或 forEach 遍历队列(注意:遍历不会移除元素):

queue.forEach(System.out::println);
for (String item : queue) {
    System.out.println(item);
}

注意事项

  1. 队列选择:根据场景选择实现类。LinkedList 支持 null 元素,ArrayDeque 性能更高但不支持 null。
  2. 容量限制ArrayBlockingQueue 需指定固定容量,LinkedBlockingQueue 可选。
  3. 线程安全ConcurrentLinkedQueueBlockingQueue 实现类适用于多线程环境。

分享给朋友:

相关文章

react路由如何使用

react路由如何使用

React 路由的基本使用 React 路由通常通过 react-router-dom 库实现,用于管理单页面应用(SPA)中的页面导航。 安装 react-router-dom: npm ins…

react refs 如何使用

react refs 如何使用

React Refs 的基本概念 Refs 是 React 提供的一种访问 DOM 节点或 React 组件实例的方式。通常在 React 的数据流中,父子组件通过 props 进行通信,但在某些情况…

php redis 队列实现

php redis 队列实现

PHP Redis 队列实现 Redis 是一个高性能的键值存储系统,常被用作消息队列。以下是使用 PHP 和 Redis 实现队列的几种方法。 安装依赖 确保已安装 PHP Redis 扩展。可以…

react refs如何使用

react refs如何使用

React Refs 的基本概念 Refs 提供了一种直接访问 DOM 节点或 React 组件实例的方式。通常在需要直接操作 DOM 或访问组件方法时使用。 创建 Refs 使用 React.cr…

react filter如何使用

react filter如何使用

react filter 的基本用法 在 React 中,filter 通常用于筛选数组数据,常见于列表渲染或数据处理场景。filter 是 JavaScript 数组的原生方法,但在 React 中…

react如何使用link

react如何使用link

使用 Link 组件进行页面导航 在 React 中,Link 是 react-router-dom 提供的组件,用于在单页应用(SPA)中实现客户端路由导航,避免页面刷新。 安装 react-…