Comparison method violates its general contract!

今天在刷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排序算法的实现。具体可以参考这里

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏青枫的专栏

HashSet集合的add()方法的源码解析

412
来自专栏HansBug's Lab

算法模板——哈希单模板字符串匹配

实现功能:第一行输入模板串;第二行输入N;接下来N行每行一个字符串,将每个字符串中出现的模板串的起始位置找出 原理:字符串双值哈希啦啦啦,和KMP其实差不太多,...

3449
来自专栏后端之路

可重复key的HashMap

碰到一些需求需要放入可重复key的HashMap,比如Excel需要报错的行号。 那么如果对象实现过hashCode方法和equals 那么放入到hashMap...

2219
来自专栏精讲JAVA

详解 equals() 方法和 hashCode() 方法

Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码。equals()和ha...

701
来自专栏别先生

Map集合遍历的四种方式理解和简单使用

~Map集合是键值对形式存储值的,所以遍历Map集合无非就是获取键和值,根据实际需求,进行获取键和值 1:无非就是通过map.keySet()获取到值,然后根据...

1776
来自专栏博岩Java大讲堂

Java集合--HashMap解惑

3254
来自专栏个人分享

LinkedHashMap的实现原理(复习)

   LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不...

694
来自专栏androidBlog

HashMap及HashTable源码解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/...

501
来自专栏精讲JAVA

详解 equals() 方法和 hashCode() 方法

Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码。equals()和ha...

712
来自专栏开发与安全

《Python 源码剖析》一些理解以及勘误笔记(2)

以下是本人阅读此书时理解的一些笔记,包含一些影响文义的笔误修正,当然不一定正确,贴出来一起讨论。 注:此书剖析的源码是2.5版本,在python.org 可...

2390

扫码关注云+社区