LOADING

加载过慢请开启缓存 浏览器默认开启

java中比较器的小结

前情回顾:

leetcode遇见了PriorityQueue的比较器,好久没写有些忘了,复习一下。

主要涉及的代码:

class Solution {
    public int[] topKFrequent(int[] nums, int k) {
        HashMap<Integer, Integer> map = new HashMap<Integer,Integer>();
        for(Integer i:nums){
            map.put(i, map.getOrDefault(i,0)+1);
        }
        Queue<Integer> pq = new PriorityQueue(new Comparator<Integer>(){
            @Override
            public int compare(Integer e1,Integer e2){
                return map.get(e2)-map.get(e1);
            }
        });
        for(Integer key:map.keySet()){
            pq.add(key);
        }
        int[] res = new int[k];
        for(int i=0;i<k;++i){
            res[i] = pq.remove();
        }
        return res;
    }
}

改为lambda表达式:

PriorityQueue<Integer> pq = new PriorityQueue((e1, e2) -> map.get(e2) - map.get(e1));

这代码,优雅,实在是太优雅了!

比较器的升降序:

//升序
return e1-e2;

//降序
return e2-e1;

规则是return<0就顺序不变,>0就交换。

所以,怎么判断就很一目了然了。

《哔哩哔哩》优雅实在太优雅了梗的意思介绍

ps:还是放一张图片比较简单:)

{% if theme.baidu_push %} {% endif %}