我在这个问题中遇到的错误已经解决,并写在下面的答案部分。
问题是 TreeMap 的以下定义引发编译器错误,我想知道原因。
Comparator<Student> comparator=new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
if(o1.roll<=o2.roll)
return -1;
else return 1;
}
};
TreeMap<Integer, Student> map=new TreeMap<>(comparator);
我不明白 Treemap 的这种实现是错误的原因。谁能帮我解释一下这里发生了什么吗?
最佳答案
compare()
需要处理三种情况:小于、大于和等于。当它们相等时,您需要返回 0
。
if (o1.roll == o2.roll) {
return 0;
}
else if (o1.roll < o2.roll) {
return -1;
}
else {
return 1;
}
Integer.compare(int x, int y)
可以为您完成这一切:
public int compare(Student o1, Student o2) {
return Integer.compare(o1.roll, o2.roll);
}
在 Java 8 中,您可以在一行中创建整个比较器:
Map<Integer, Student> map = new TreeMap<>(Comparator.comparingInt(s -> s.roll));
关于java - 如何使用比较器实现Treemap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52128689/