前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java的Queue

java的Queue

原创
作者头像
堕落飞鸟
发布2023-04-03 07:25:20
2710
发布2023-04-03 07:25:20
举报
文章被收录于专栏:飞鸟的专栏

Java中的Queue是一种先进先出(FIFO)的数据结构,它继承自Collection接口,并扩展了java.util.AbstractQueue抽象类。Queue是Java集合框架中最重要的一种数据结构,因为它是Java并发编程中的重要组成部分,可以被用于实现各种任务调度、消息队列、缓存、事件处理等应用场景。本文将对Java中的Queue进行详细介绍,包括Queue的基本概念、特点、用法和示例。

Queue的基本概念

Queue是Java中一种抽象的数据结构,它表示一系列元素的集合,其中元素的插入和删除顺序遵循先进先出的原则。Queue可以被看作是一种“队列”或“排队”数据结构,其中新元素被添加到队列的末尾,并在队列的头部删除元素。

Queue接口中定义了一组基本的方法,用于实现队列数据结构的基本操作,包括添加、删除、查询等。Queue接口中定义的方法包括以下几种:

  • add(E e):将指定元素添加到队列的末尾。如果队列已满,则抛出IllegalStateException异常。
  • offer(E e):将指定元素添加到队列的末尾。如果队列已满,则返回false。
  • remove():删除并返回队列的头部元素。如果队列为空,则抛出NoSuchElementException异常。
  • poll():删除并返回队列的头部元素。如果队列为空,则返回null。
  • element():返回队列的头部元素。如果队列为空,则抛出NoSuchElementException异常。
  • peek():返回队列的头部元素。如果队列为空,则返回null。

以上方法中,add、offer、remove和poll是队列的基本操作,element和peek是队列的查询操作。

Queue的实现类

Java集合框架中提供了多种Queue的实现类,包括以下几种:

1. LinkedList

LinkedList是Java中的双向链表实现,它实现了Queue接口,并提供了一个非常高效的队列实现。在使用LinkedList实现Queue时,元素的添加和删除操作的时间复杂度为O(1)。

以下是LinkedList实现Queue的示例:

代码语言:javascript
复制
Queue<String> queue = new LinkedList<>();
queue.offer("A");
queue.offer("B");
queue.offer("C");
System.out.println(queue.poll()); // A
System.out.println(queue.poll()); // B
System.out.println(queue.poll()); // C

2. PriorityQueue

PriorityQueue是Java中的优先队列实现,它实现了Queue接口,并提供了一个根据元素优先级排序的队列实现。在使用PriorityQueue实现Queue时,元素会按照指定的排序规则被添加和删除,因此需要实现元素的Comparable接口。

以下是PriorityQueue实现Queue的示例:

代码语言:javascript
复制
Queue<Integer> queue = new PriorityQueue<>();
queue.offer(3);
queue.offer(1);
queue.offer(2);
System.out.println(queue.poll()); // 1
System.out.println(queue.poll()); // 2
System.out.println(queue.poll()); // 3

3. ArrayDeque

ArrayDeque是Java中的双端队列实现,它实现了Queue接口,并提供了一个高效的队列实现。在使用ArrayDeque实现Queue时,元素的添加和删除操作的时间复杂度为O(1)。

以下是ArrayDeque实现Queue的示例:

代码语言:javascript
复制
Queue<String> queue = new ArrayDeque<>();
queue.offer("A");
queue.offer("B");
queue.offer("C");
System.out.println(queue.poll()); // A
System.out.println(queue.poll()); // B
System.out.println(queue.poll()); // C

Queue的应用示例

Queue作为一种先进先出的数据结构,可以被广泛应用于各种任务调度、消息队列、缓存、事件处理等应用场景。下面是一个简单的消息队列示例:

代码语言:javascript
复制
public class MessageQueue {
    private Queue<String> queue = new LinkedList<>();

    public synchronized void sendMessage(String message) {
        queue.offer(message);
        notifyAll();
    }

    public synchronized String receiveMessage() throws InterruptedException {
        while (queue.isEmpty()) {
            wait();
        }
        return queue.poll();
    }
}

在上面的示例中,我们定义了一个MessageQueue类,它包含一个Queue<String>实例用于存储消息。sendMessage方法用于发送消息,将消息添加到队列中,并通过notifyAll方法唤醒等待的线程。receiveMessage方法用于接收消息,如果队列为空,则线程会进入等待状态,直到有新的消息到来。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Queue的基本概念
  • Queue的实现类
    • 1. LinkedList
      • 2. PriorityQueue
        • 3. ArrayDeque
        • Queue的应用示例
        相关产品与服务
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档