【发布时间】:2019-11-21 20:40:35
【问题描述】:
代码:
LinkedBinarySearchTree <Pair<String, Integer>> at = new LinkedBinarySearchTree<>();
Pair<String, Integer> p = new Pair<>(str, dni);
at.insert(p);
Pair 是给我的一个类,它不是 java 类 Pair(如果 java 有一个默认的 pair 类,idk 但万一它有一个,这个不是那个)。
类对中没有定义compareTo,而insert 方法在某些时候使用了 compareTo,当它发生时它崩溃了。
我需要实现抽象类Comparable并从外部重写类中的compareTo方法,而不需要修改类Pair的代码,这意味着我必须从“外部”来做。
有没有办法做到这一点?
这是我之前做的:
public class MyComparator implements Comparator <Pair<String, Integer>> {
@Override
public int compare(Pair<String, Integer> o1, Pair<String, Integer> o2) {
final Collator instance = Collator.getInstance();
instance.setStrength(Collator.NO_DECOMPOSITION);
if (!o1.getFirst().equals(o2.getFirst())){
return o1.getFirst().compareTo(o2.getFirst());
} else {
return o1.getSecond().compareTo(o2.getSecond());
}
}
}
但它不适用于 Comparator,由于某种原因它必须是 Comparable 并且我不知道该怎么做,因为我无法参考(this):
public class MyComparable implements Comparable <Pair<String, Integer>> {
@Override
public int compareTo(Pair<String, Integer> o) {
final Collator instance = Collator.getInstance();
instance.setStrength(Collator.NO_DECOMPOSITION);
//I can't use "this" here because ovbiously I'm not inside the class Pair so I don't know how to do it
if (!this.getFirst().equals(o.getFirst())){ //I can't use "this"
return this.getFirst().compareTo(o.getFirst());
} else {
return this.getSecond().compareTo(o.getSecond());
}
}
}
我需要帮助我一直在尝试自己寻找答案,但我没有想法......如果这个问题太简单或没有帮助,我很抱歉,但我在这里有点挣扎:/。
编辑: 我调试了程序,这就是它崩溃的地方,这就是为什么我 认为我需要 Comparable:
public class DefaultComparator<E> implements Comparator<E> {
@Override
public int compare(E a, E b) throws ClassCastException {
return ((Comparable<E>) a).compareTo(b); //here
}
}
【问题讨论】:
-
您可能会感到困惑。仅仅因为你的比较器不工作并不意味着更好的比较器不是解决方案。
-
“崩溃”是什么意思?你有例外吗?如果有,是哪一个?是
ClassCastException吗?
标签: java comparator comparable