Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 构造函数中使用转换为Compariable的匿名比较器_Java_Comparator_Comparable_Anonymous - Fatal编程技术网

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。非常感谢你!我一直被这件事困扰着,哈哈。