优先队列的问题

来源:8-8 Java中的PriorityQueue

qq_______13

2018-08-04

PriorityQueue<Freq> pq = new PriorityQueue<>(new Comparator<Freq>()

{@Override

public int compare(Freq a, Freq b)

    {return a.freq - b.freq;}

});这段代码是什么意思,里面的方法什么时候后执行

写回答

1回答

liuyubobobo

2018-08-04

是规定元素之间如何比较的方法。在这里,规定了两个Freq类型的变量如何比较。


由于PriorityQueue是基于堆结构的,堆结构要求所存储的元素必须具有可比较性。对于元素的可比较,可以直接让元素本身实现Comparable接口,覆盖其中的compareTo方法。但是,对于一些Java的内置类型,不能用这种方式自定义比较方式(比如想要存储String类型,但是String之间的比较方式我想要修改一下,不是按照字典序,而是按照字符串长度),那么此时,就可以使用这种创建Comparator类对象的方式了:)


关于Java中的Comparator的使用方法,可以上网查询更多资料。不仅仅是在优先队列中,基本对于所有可以比较的情况,使用Java的标准库都可以使用Comparator的方式。最典型的,比如排序过程:)


加油!

3
0

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程