今天在刷LeetCode题目的时候,问题使用HashMap按照value排序来解决,自定义比较器,但是报错:java.lang.IllegalArgumentException: Comparison method violates its general contract! 原比较器的写法:
Comparator<Map.Entry<Integer, Integer>> byMapValues = new Comparator<Map.Entry<Integer, Integer>>() { @Override public int compare(Map.Entry<Integer, Integer> left, Map.Entry<Integer, Integer> right) { if (left.getValue()<right.getValue()) return 1; else return -1; } };
之后正确的写法:
Comparator<Map.Entry<Integer, Integer>> byMapValues = new Comparator<Map.Entry<Integer, Integer>>() { @Override public int compare(Map.Entry<Integer, Integer> left, Map.Entry<Integer, Integer> right) { return right.getValue().compareTo(left.getValue()); } };
大概的原因是JDK1.7版本的问题,替换了java.util.Arrays.sort排序算法的实现。具体可以参考这里。
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句