Java 构造函数中使用转换为Compariable的匿名比较器
我在构造函数中编写匿名比较器时遇到问题。我的指示如下: 您的代码应该假定密钥类型是可比较的,即实现可比较的 然而,我们正在使用Java 构造函数中使用转换为Compariable的匿名比较器,java,comparator,comparable,anonymous,Java,Comparator,Comparable,Anonymous,我在构造函数中编写匿名比较器时遇到问题。我的指示如下: 您的代码应该假定密钥类型是可比较的,即实现可比较的 然而,我们正在使用 private Comparator<K> _comparator; 专用比较器\u比较器; 我们的数据结构还有一个私有节点类: private static class Node<K,V> extends AbstractEntry<K,V> { Node<K,V> left, right; Node
private Comparator<K> _comparator;
专用比较器\u比较器;
我们的数据结构还有一个私有节点类:
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;
}
}
私有静态类节点扩展了AbstractEntry{
左、右淋巴结;
节点(K,V){
超级(k,v);
左=右=空;
}
}
我试过这样写:
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());
}
};
}
公共树映射(){
_比较器=(比较器)新比较器(){
@凌驾
公共整数比较(节点o1、节点o2){
返回((整数)o1.getKey()).compareTo((整数)o2.getKey());
}
};
}
但这是不正确的,因为我们不应该比较节点,或者假设密钥是整数。我还应该使用未经检查的强制转换来进行比较,但我不知道如何或在何处执行此操作
作业的实际说明如下:
在您将要编写的类中有两个构造函数:一个为键类型获取一个comparator,它不能为null。另一个没有,但是如果使用这个构造函数,代码应该假设键类型是可比较的,也就是说,实现是可比较的。然后,使用此假设创建一个比较器,该比较器使用compareTo方法进行工作
任何提示或想法都将不胜感激。好的。因此,您需要编写一个比较器,使用可比较键的自然顺序对其进行排序。也就是说,它应该委托给他们的compareTo方法 所以你想要
Comparator<K> comparator = (a, b) -> ((Comparable<K>) a).compareTo(b);
比较器比较器=(a,b)->(可比)a.比较器(b);
或者,如果您确实想将其作为匿名内部类编写:
Comparator<K> comparator = new Comparator<K>() {
@Override
public int compare(K a, K b) {
return ((Comparable<K>) a).compareTo(b);
}
};
比较器比较器=新比较器(){
@凌驾
公共整数比较(ka,kb){
回报率((可比)a)。与(b)相比;
}
};
我们不应该比较节点:您应该比较什么?比较器的用途是什么?说明是什么?更新了更多信息,希望对您有所帮助。哦!我懂了。你在比较中选择Comparable,然后调用compareTo…我一直试图在声明中的某个地方选择Comparable。非常感谢你!我一直被这件事困扰着,哈哈。