如何把HashMap放入PQ并且按照值排序?

LC347 Top K Frequent elements就是绝佳的例子

public class Solution {
    public List<Integer> topKFrequent(int[] nums, int k) {
        Map<Integer, Integer> map = new HashMap<>();
        for(int n: nums){
            map.put(n, map.getOrDefault(n,0)+1);
        }
           
        PriorityQueue<Map.Entry<Integer, Integer>> maxHeap = 
                         new PriorityQueue<>((a,b)->(b.getValue()-a.getValue()));
        for(Map.Entry<Integer,Integer> entry: map.entrySet()){
            maxHeap.add(entry);
        }
        
        List<Integer> res = new ArrayList<>();
        while(res.size()<k){
            Map.Entry<Integer, Integer> entry = maxHeap.poll();
            res.add(entry.getKey());
        }
        return res;
    }
}

我们要注意的是 在PQ里面放入hashmap, PQ的初始化方式应该如下:

PriorityQueue<Map.Entry<Integer, Integer>> maxHeap = 
                         new PriorityQueue<>((a,b)->(b.getValue()-a.getValue()));

就是说 我们不是把hashmap整个放进去 而是把hashmap的每个元素依次放进去。
而每个元素的表示方式为:Map.Entry< Integer, Integer> 记住这一点就可以了

posted @ 2020-12-18 00:45  EvanMeetTheWorld  阅读(33)  评论(0)    收藏  举报