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

(0)
K-seoK-seoSEO优化员
上一篇 2024年1月25日 11:10
下一篇 2024年1月25日 11:12

相关推荐

发表回复

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

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