队列Queue-03

举报
kwan的解忧杂货铺 发表于 2024/08/04 23:16:58 2024/08/04
【摘要】 1.什么是 AbstractQueue?AbstractQueue 是 Java 集合框架中的一部分,属于 java.util 包。它是 Queue 接口的一个抽象实现,提供了 Queue 接口的骨干实现,使得程序员可以集中精力实现 Queue 接口的剩余部分,而不必关心基本的队列操作。 2.Queue 接口介绍Queue 接口是一个扩展了 Collection 接口的接口,它代表一个队列...

1.什么是 AbstractQueue?

AbstractQueue 是 Java 集合框架中的一部分,属于 java.util 包。它是 Queue 接口的一个抽象实现,提供了 Queue 接口的骨干实现,使得程序员可以集中精力实现 Queue 接口的剩余部分,而不必关心基本的队列操作。

2.Queue 接口介绍

Queue 接口是一个扩展了 Collection 接口的接口,它代表一个队列集合,允许按照 FIFO(先进先出)原则对元素进行添加和移除。Queue 接口定义了队列的基本操作,如 add, remove, element, offer, poll, peek 等。其中,offer 方法用于添加元素到队列,如果添加成功返回 true,如果队列已满则返回 falsepoll 方法用于移除并返回队列头部的元素,如果队列为空则返回 nullpeek 方法用于返回队列头部的元素但不移除它,如果队列为空则返回 null

3.AbstractQueue 方法

AbstractQueue 提供了这些方法的默认实现,但是它没有实现 Queue 接口中的 add, remove, 和 element 方法。这是因为这些方法的行为与 offer, poll, 和 peek 相似,但它们在队列为空或满时的行为不同。例如,add 方法在添加失败时会抛出一个 IllegalStateException 异常,而 remove 方法在队列为空时也会抛出 NoSuchElementException 异常。

AbstractQueue 还提供了 iterator 方法的实现,该方法返回一个迭代器,允许按照 FIFO 顺序遍历队列中的元素。此外,它还提供了 size 方法的实现,返回队列中的元素数量。但是,由于队列的动态特性,size 方法的实现可能不是线程安全的,因此在并发环境中使用时需要谨慎。

3.自定义队列

在实现自定义队列时,继承 AbstractQueue 可以减少大量的样板代码。开发者只需要关注实现 offer, poll, peek, 和 isEmpty 方法,以及可能的 size 方法,就可以创建一个符合 Queue 接口的队列。这种设计模式在 Java 中很常见,它鼓励开发者通过继承和扩展来实现特定的功能,同时保持代码的简洁性和可维护性。

4.AbstractQueue 源代码

AbstractQueue 是一个抽象类,实现了 Queue 接口,提供了一些 Queue 操作的骨架实现。

public abstract class AbstractQueue<E>
    extends AbstractCollection<E>
    implements Queue<E> {
}

5.AbstractQueue 核心方法

  • add
  • addAll
  • clear
  • element
  • remove

方法 add、remove、element 方法基于 offer、poll 和 peek。也就是说如果不能正常操作,则抛出异常。

 public boolean add(E e) {
        if (offer(e))
            return true;
        else
            throw new IllegalStateException("Queue full");
}

如果继承 AbstractQueue 抽象类则必须保证 offer 方法不允许 null 值插入。

6.AbstractQueue 的继承

哪些类继承了 AbstractQueue 抽象类:

  • ArrayBlockingQueue
  • LinkendBlockingQueue
  • LinkedBlockingDeque
  • LinkedTransferQueue
  • SynchronousQueue
  • PriorityBlockQueue
  • DelayQueue
  • PriorityQueue
  • ConcurrentLinkedQueue

7.AbstractQueue 应用场 7

AbstractQueue 的使用场景非常广泛,它可以用于实现各种类型的队列,如链表队列、循环数组队列、优先队列等。通过继承 AbstractQueue,开发者可以利用其提供的默认实现,同时根据自己的需求添加特定的逻辑和优化。

AbstractQueue 是 Java 集合框架中一个非常有用的抽象类,它为实现队列提供了一个方便的起点,使得开发者可以更容易地创建和管理队列集合。通过合理地使用 AbstractQueue,可以提高代码的复用性,减少开发时间,并确保实现的队列符合 Queue 接口的规范。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。