代码:
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一起使用,由于某种原因它必须是可比较的,而且我不知道该怎么做,因为我无法参考(此):
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());
}
}
}
我需要帮助,我一直在尝试自己寻找答案,但我的想法不对...如果这个问题太简单或没有帮助,很抱歉,但我在这里苦苦挣扎:/。
编辑: 我调试了程序,这就是它崩溃的原因,这就是为什么我 认为我需要可比的:
public class DefaultComparator<E> implements Comparator<E> {
@Override
public int compare(E a,E b) throws ClassCastException {
return ((Comparable<E>) a).compareTo(b); //here
}
}