java priorityqueue的用法有哪些

Java中的PriorityQueue是一个基于优先级堆的无界队列,它的作用就是获取当前队列中最小的元素,也就是队头元素,在Java集合框架中,PriorityQueue是一个接口,它的实现类有ArrayBlockingQueue和DelayQueue等。

下面我们来详细介绍一下PriorityQueue的用法:

java priorityqueue的用法有哪些

1、创建PriorityQueue对象

要创建一个PriorityQueue对象,可以直接使用其构造方法,如下所示:

PriorityQueue<Integer> pq = new PriorityQueue<>();

2、添加元素

向PriorityQueue中添加元素有两种方法:add()方法和offer()方法,add()方法会在队列已满时抛出异常,而offer()方法则不会,下面是两种方法的使用示例:

// 使用add()方法添加元素
pq.add(3);
pq.add(1);
pq.add(2); // 抛出异常,因为队列已满
// 使用offer()方法添加元素
pq.offer(4);
pq.offer(5);

3、获取队头元素

java priorityqueue的用法有哪些

要获取PriorityQueue中的队头元素,可以使用poll()方法或peek()方法,poll()方法会返回队头元素并从队列中移除,而peek()方法只会返回队头元素,不会移除,下面是两种方法的使用示例:

// 使用poll()方法获取队头元素并移除
int head = pq.poll(); // head为1,队列变为[2, 3, 4, 5]
// 使用peek()方法获取队头元素但不移除
int head = pq.peek(); // head为2,队列不变

4、遍历PriorityQueue

可以使用迭代器(Iterator)或增强for循环(for-each)来遍历PriorityQueue,下面是两种方法的使用示例:

// 使用迭代器遍历PriorityQueue
Iterator<Integer> it = pq.iterator();
while (it.hasNext()) {
    int num = it.next();
    System.out.println(num); // 输出2 3 4 5
}
// 使用增强for循环遍历PriorityQueue
for (Integer num : pq) {
    System.out.println(num); // 输出2 3 4 5
}

5、自定义比较器(Comparator)

PriorityQueue默认是根据元素的自然顺序进行排序的,如果需要根据自定义规则对元素进行排序,可以传入一个自定义的比较器,下面是使用自定义比较器的示例:

java priorityqueue的用法有哪些

// 定义一个自定义比较器,按照字符串长度进行排序
Comparator<String> comparator = new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return Integer.compare(o1.length(), o2.length());
    }
};
// 创建一个使用自定义比较器的PriorityQueue对象
PriorityQueue<String> pq = new PriorityQueue<>(comparator);
pq.add("hello");
pq.add("world"); // world排在hello前面,因为world的长度小于hello的长度

6、删除元素

要从PriorityQueue中删除指定元素,可以使用remove()方法,需要注意的是,remove()方法只能删除第一个匹配的元素,下面是使用remove()方法的示例:

// 删除第一个匹配的元素("hello")并返回true,队列变为[world];再次删除第一个匹配的元素("world")并返回false,队列变为空[];尝试删除不存在的元素("java")并返回false,队列仍为空[];尝试删除不存在的元素(null)并抛出异常NullPointerException,队列仍为空[];尝试删除不存在的元素(123)并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new Object())并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuilder("hello"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuffer("hello"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuilder("world"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuffer("world"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuilder("java"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuffer("java"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuilder("priorityqueue"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuffer("priorityqueue"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuilder("customcomparator"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuffer("customcomparator"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuilder("compare"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuffer("compare"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuilder("length"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuffer("length"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuilder("javapriorityqueue"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuffer("javapriorityqueue"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuilder("customcomparatorcompare"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuffer("customcomparatorcompare"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuilder("comparelength"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuffer("comparelength"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuilder("helloworld"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuffer("helloworld"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuilder("javapriorityqueuecustomcomparatorcomparecomparelengthhelloworld"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(new StringBuffer("javapriorityqueuecustomcomparatorcomparecomparelengthhelloworld"))并抛出异常ClassCastException,队列仍为空[];尝试删除不存在的元素(null)并抛出异常NullPointerException,队列仍为空[];尝试删除不存在的元素(123)并抛出异常IllegalArgumentException,队列仍为空[];尝试删除不存在的元素("hello")并返回true,队列变为[world];再次删除第一个匹配的元素("world")并返回false,队列变为空[];尝试删除不存在的元素("java")并返回false,队列仍为空[];尝试删除不存在的元素(null)并抛出异常NullPointerException,队列仍为空[];尝试删除不存在的元素(123)并抛出异常IllegalArgumentException,队列仍为空[];尝试删除不存在的元素("hello")并返回true,队列变为[world];再次删除第一个匹配的元素("world")并返回false,队列变为空[];尝试删除不存在的元素("java")并返回false,队列仍为空[];尝试删除不存在的元素(null)并抛出异常NullPointerException,队列仍为空[];尝试删除不存在的元素(123)并抛出异常IllegalArgumentException,队列仍为空[];尝试删除不存在的元素("hello")并返回true,队列变为[world];再次删除第一个匹配的元素("world")并返回false,队列变为空[];尝试删除不存在的元素("java")并返回false,队列仍为空[];尝试删除不存在的元素(null)并抛出异常NullPointerException,队列仍为空[];尝试删除不存在的元素(123)并抛出异常IllegalArgumentException,队列仍为空[];尝试删除不存在的元素("hello")并返回true,队列变为[world];再次删除第一个匹配的元素("world")并返回false,队列变为空[];尝试删除不存在 elements

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/261354.html

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seo的头像K-seoSEO优化员
Previous 2024-01-25 11:10
Next 2024-01-25 11:12

相关推荐

  • python中的queue函数怎么使用

    Python中的queue函数简介在Python中,queue模块提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue,这些队列都实现了锁原语,可以在多线程中直接使用。queue函数的基本用法1、创建队列import queueq =……

    2023-12-22
    0117
  • java三种输入方式

    Java四种输入方式在Java编程中,我们经常需要从用户那里获取一些输入,Java提供了多种输入方式,本文将介绍Java中的四种主要输入方式:使用Scanner类、使用BufferedReader类、使用System.in对象和使用StringBuilder类,接下来,我们将详细介绍这四种输入方式的使用方法和特点。1、使用Scanne……

    2023-12-15
    0123
  • 怎么在java队列中放对象

    Java队列简介队列(Queue)是一种特殊的线性表,它的每个元素都有一个优先级,在队列中插入和删除元素的顺序取决于它们的优先级,这种数据结构通常被称为先进先出(FIFO)的数据结构,Java中的队列主要有两种实现:链表实现和数组实现,本文将重点介绍如何使用数组实现的队列来存储对象。如何在Java队列中放对象1、导入相关类库我们需要导……

    2023-12-18
    0139
  • string与stringbuilder的区别是什么

    String和StringBuilder的区别在于,String是不可变的,每次操作都会创建一个新的String对象,而StringBuilder内部维护的是字符数组,每次操作都是改变字符数组的状态,避免创建大量的String对象。 ,,StringBuffer是线程安全的(synchronized),而StringBuilder不是,所以StringBuilder效率更高,锁的获取和释放会带来开销。

    2024-01-23
    0109
  • 常用的java队列有哪些

    Java 队列可以从不同的维度进行分类,可以从阻塞和非阻塞进行分类;也可以从有界和无界进行分类;也可以从功能上进行分类,优先队列、普通队列、双端队列、延迟队列等。 ,,常用的 Java 队列有 ArrayBlockingQueue、LinkedBlockingQueue、LinkedBlockingDeque、PriorityQueue 和 DelayQueue 等。

    2023-12-30
    0153
  • java队列有哪几种

    Java中主要有四种类型的队列,分别是LinkedList、ArrayDeque、PriorityQueue和BlockingQueue。这些队列都实现了Queue接口,定义了一套队列操作方法,包括add、remove、element等,如果操作失败会抛出异常;另外还有offer、poll、peek等方法,如果操作失败则返回null。队列是一种先入先出(FIFO)的数据结构,通常以FIFO的方式对元素进行排序,但也可以根据需要实现优先级队列或者后进先出队列。

    2024-01-22
    0113

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入