首页 > 解决方案 > 如何编写自定义比较器以使用 SimpleEntry 对树集进行排序?

问题描述

我目前正在处理一个要求我使用 Treeset 对值对进行排序的作业。我被要求使用 SimpleEntry。我将它们存储在 Treeset 上:

    TreeSet treeSet = new TreeSet(new PairComparator());
    SimpleEntry pair = new SimpleEntry(weight,source);
    treeSet.add(pair);

这是我的自定义比较器:

static class PairComparator implements Comparator<AbstractMap.SimpleEntry<Integer, Integer>> {

        @Override
        public int compare(AbstractMap.SimpleEntry<Integer,Integer> o1, AbstractMap.SimpleEntry<Integer,Integer> o2) {
            int key1 = o1.getKey() ;
            int key2 = o2.getKey();
            return key1 - key2;
        }
    }

我收到一个我不明白的错误,即:

类 java.util.HashMap 不能转换为类 java.lang.Integer

你能解释一下发生了什么吗?我对定义自定义比较器并不完全熟悉。

感谢您的关注 !

编辑:我在我的 SimpleEntry 上添加了一个 Hashmap 作为键,而不是一个整数,这现在很明显......

标签: javatreecomparator

解决方案


似乎您以某种方式添加了一个 HashMap 作为 TreeSet 中 SimpleEntries 之一的键。

请显示一个完整的可运行示例。

这段代码对我有用:

import java.util.AbstractMap;
import java.util.AbstractMap.SimpleEntry;
import java.util.Comparator;
import java.util.TreeSet;

public class Main {

    static class PairComparator implements Comparator<SimpleEntry<Integer, Integer>> {

        @Override
        public int compare(SimpleEntry<Integer, Integer> o1, SimpleEntry<Integer, Integer> o2) {
            int key1 = o1.getKey();
            int key2 = o2.getKey();
            return key1 - key2;
        }
    }

    public static void main(String[] args) {
        TreeSet treeSet = new TreeSet(new PairComparator());
        treeSet.add(new SimpleEntry(42, 69));
        treeSet.add(new SimpleEntry(37, 65));
        treeSet.add(new SimpleEntry(23, 19));
        treeSet.add(new SimpleEntry(54, 12));
        System.out.println(treeSet);
    }
}

推荐阅读