java - 如何编写自定义比较器以使用 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 作为键,而不是一个整数,这现在很明显......
解决方案
似乎您以某种方式添加了一个 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);
}
}
推荐阅读
- python - python文件之间的相互依赖关系
- jmeter - Linux 上的 Jmeter 版本说是最新版本,但似乎不是
- android - 交错的回收器视图布局,具有默认背景颜色的图像视图
- ios - swift 4:从不调用后台获取
- javascript - 数组仅在我刷新页面时获取数据
- html - 如何通过在 JQuery 中使用类来获取兄弟姐妹的 id
- reactjs - 在生产服务器上使用 React 定义 API 目的地
- python - Python datetime.strptime 似乎接受长度无效的输入
- python - 将两个字符串的串联附加到列表中
- postgresql - 具有松散返回数据类型的 PostgreSQL 函数