Java数据结构-优先级队列

Java中的优先级队列(Priority Queue)是Java集合框架的一部分,它实现了Queue接口,并允许存储的元素具有一定的优先级。优先级队列是自然排序的,或者根据创建优先级队列时提供的Comparator进行排序。这意味着队列的头部是优先级最高的元素。如果多个元素具有相同的优先级,则它们按照它们在队列中的顺序排序。

在Java中,优先级队列通常通过PriorityQueue类实现。以下是一个简单的示例:

java 复制代码
import java.util.PriorityQueue;

public class PriorityQueueExample {
    public static void main(String[] args) {
        // 创建一个优先级队列
        PriorityQueue<Integer> pq = new PriorityQueue<>();

        // 添加元素到优先级队列
        pq.add(3);
        pq.add(1);
        pq.add(4);
        pq.add(1);
        pq.add(5);
        pq.add(9);
        pq.add(2);
        pq.add(6);

        // 打印优先级队列的元素
        while (!pq.isEmpty()) {
            System.out.println(pq.poll());
        }
    }
}

在上面的示例中,我们创建了一个PriorityQueue对象,并添加了一些整数。由于PriorityQueue默认使用自然排序(对于整数,就是从小到大的顺序),因此当我们打印队列的元素时,它们将按照从小到大的顺序打印。

你也可以通过提供一个自定义的Comparator来改变排序规则。例如,如果你想要一个优先级队列,其中元素按照从大到小的顺序排列,你可以这样做:

java 复制代码
import java.util.Comparator;
import java.util.PriorityQueue;

public class PriorityQueueExample {
    public static void main(String[] args) {
        // 创建一个优先级队列,并使用自定义的Comparator
        PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1; // 降序排列
            }
        });

        // 添加元素到优先级队列
        pq.add(3);
        pq.add(1);
        pq.add(4);
        pq.add(1);
        pq.add(5);
        pq.add(9);
        pq.add(2);
        pq.add(6);

        // 打印优先级队列的元素
        while (!pq.isEmpty()) {
            System.out.println(pq.poll());
        }
    }
}

在这个例子中,我们创建了一个PriorityQueue对象,并提供了一个自定义的Comparator。这个Comparator将元素按照从大到小的顺序排列。因此,当我们打印队列的元素时,它们将按照从大到小的顺序打印。

相关推荐
WiChP4 小时前
【V0.1B5】从零开始的2D游戏引擎开发之路
java·服务器·数据库
cch89184 小时前
汇编与Java:底层与高层的编程对决
java·开发语言·汇编
荒川之神5 小时前
拉链表概念与基本设计
java·开发语言·数据库
cch89185 小时前
汇编与Go:底层到高层的编程差异
java·汇编·golang
workflower5 小时前
用硬件换时间”与“用算法降成本”之间的博弈
人工智能·算法·安全·集成测试·无人机·ai编程
chushiyunen5 小时前
python中的@Property和@Setter
java·开发语言·python
禾小西5 小时前
Java中使用正则表达式核心解析
java·python·正则表达式
yoyo_zzm5 小时前
JAVA (Springboot) i18n国际化语言配置
java·spring boot·python