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排序算法的實現。具體可以參考這裏

發佈了56 篇原創文章 · 獲贊 103 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章