我在构造函数中编写匿名比较器时遇到问题。我的指示如下:
"您的代码应该假设密钥类型具有可比性,即实现Comparable"
但是,我们正在使用
private Comparator<K> _comparator;
我们的数据架构还有一个私有类Node:
private static class Node<K,V> extends AbstractEntry<K,V> {
Node<K,V> left, right;
Node(K k, V v) {
super(k,v);
left = right = null;
}
}
我确实尝试过这样写:
public TreeMap() {
_comparator = (Comparator<K>) new Comparator<Node<K,V>>(){
@Override
public int compare(Node<K, V> o1, Node<K, V> o2) {
return ((Integer) o1.getKey()).compareTo((Integer) o2.getKey());
}
};
}
但这并不正确,因为我们不应该比较节点,或假设该键是整数。我也应该使用未经检查的演员来比较,我无法弄清楚如何或在何处这样做。
作业的实际指示如下:
您要编写的类中有两个构造函数:一个用于键类型的比较器,它不能为null。另一个没有,但是如果使用这个构造函数,你的代码应该假设密钥类型是可比较的,即实现Comparable。然后,这个假设用于创建一个使用compareTo方法来完成其工作的比较器。
任何提示或想法都将受到赞赏。
答案 0 :(得分:1)
行。因此,您需要编写一个比较器,使用它们的自然顺序对可比较的键进行排序。即它应该委托他们的compareTo方法。
所以你想要
Comparator<K> comparator = (a, b) -> ((Comparable<K>) a).compareTo(b);
或者,如果你真的想把它写成一个匿名的内部类:
Comparator<K> comparator = new Comparator<K>() {
@Override
public int compare(K a, K b) {
return ((Comparable<K>) a).compareTo(b);
}
};