前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >抛出IllegalStateException异常。Queue-PriorityQueue源码解析

抛出IllegalStateException异常。Queue-PriorityQueue源码解析

作者头像
w4979的博客
发布2020-06-01 11:32:19
4390
发布2020-06-01 11:32:19
举报
文章被收录于专栏:随笔记录

添加元素接口:

add(E e) -> 往队列添加一个元素,如果队列已满抛出IllegalStateException异常。 offer(E e) -> 往队列添加一个元素,true成功,false失败,和add区别在与不会因为队列已满抛异常。 删除元素接口:

remove() -> 删除队列头元素并返回该元素,如果队列为空抛出NoSuchElementException异常。 E poll() -> 删除队列头元素并返回该元素,如果队列为空返回null(与remove不同)。 获取队列头元素接口:

E element() -> 返回队列头部元素(没有删除),如果队列为空抛出NoSuchElementException异常。 E peek() -> 返回队列头部元素(没有删除),如果队列为空返回null。 Queue常用的实现类

上图中列出的是Queue平时常用的实现类:

ArrayBlockingQueue -> 有边界的数组形式实现的阻塞队列。 LinkedBlockingQueue -> 有边界的链表形式实现的阻塞队列。 PriorityQueue -> 无边界的二叉堆形式实现的优先级队列。 DelayQueue -> 无边界的优先级形式实现的延迟队列。 PriorityQueue PriorityQueue是基于二叉堆形式实现的无界队列。队列中元素类型必须是可比较的,构造函数如果没有传入Comparator默认是自然排序。

PriorityQueue结构

PriorityQueue继承了AbstractQueue,AbstractQueue实现Queue接口,即PriorityQueue拥有Queue的方法和特征。

Object[] queue:存放队列元素。

int DEFAULT_INITIAL_CAPACITY:默认的队列大小,默认值为11。

int size:PriorityQueue队列中元素个数。

int modCount:PriorityQueue队列修改次数。

Comparator<? super E> comparator:队列元素排序比较器。

int MAX_ARRAY_SIZE:队列最大值(Integer.MAX_VALUE - 8),VM的保留了8字节的 header words。

PriorityQueue示例

代码语言:javascript
复制

package com.juc.queue;
import java.util.PriorityQueue;
 /**
Created on 2020/5/10 23:29.
@author Griez
 */
 public class PriorityQueueTest {
 public static final PriorityQueue QUEUE = new PriorityQueue<>();
 public static void main(String[] args) {
 for (int i = 10; i > 0 ; i–) {
 QUEUE.offer(i);
 }
 for (int i = 0; i < 10; i++) {
 System.out.println(QUEUE.poll());
 }
 }
 }
  • 创建一个存放Integer的PriorityQueue,采用默认的自然排序。并倒序的往PriorityQueue添加10-1。然后从PriorityQueue头部出队列并输出,输出结果是1-10升序。如果是让我们实现应该是入队时用插叙排序好并存放在queue数组中,但是这样实现往queue数组中添加和删除元素移动次数是不是最优的呢?接下来我们看一下Josh Bloch, Doug Lea是怎么样实现的。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/05/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档