假设我有一个HashMap
,其中值的类型为PriorityQueue
,如下所示:
HashMap<Integer, PriorityQueue<Integer>> someMap = new HashMap<>();
但是,如果我需要PriorityQueue
有一个定制的比较器,我如何初始化这个HashMap
呢?
实际的比较器要复杂得多,但为了简单起见,我们假设我需要PriorityQueue
按逆序排序,我可以这样做:
PriorityQueue<Integer> queue = new PriorityQueue<>(Comparator.reverseOrder());
我应该在哪里以及如何为HashMap
中的值定义比较器?
2条答案
按热度按时间zxlwwiss1#
PriorityQueue
内部使用的Comparator
无论如何都不会改变它的类型。一个使用自然排序的
PriorityQueue<Integer>
,或者Comparator.reverseOrder()
,或者Comparator.nullsFirst(Comparator.reverseOrder())
(或者任何其他比较器)仍然是PriorityQueue<Integer>
,并且你可以将所有这些队列存储在一个类型为Map<Integer,PriorityQueue<Integer>>
的Map中在示例化Map时,您不需要做任何特殊的事情,只需像以前那样调用构造函数
new HashMap<>()
即可。注
<Integer,Queue<Integer>>
这样的泛型类型参数是为了让编译器验证你使用的是正确的类型。这是一种编译类型机制,用于防止堆污染等问题,它与运行时内存分配无关。Map
和Queue
等高级抽象的好处。332nm8kg2#
答案在问题本身中.你把比较器放在优先级队列示例中.
对于初始化和当你把数据放入你的队列时,你可以使用相同的队列来放入数据。