好的,所以我正在做一个学校项目,我们在其中实现Binary TreeMap,并提供了一个基本模板进行填写。我将尝试不转储所有代码,但这是我碰壁的地方。我需要能够比较键,以便插入新元素,正确搜索以及诸如此类。但是我一直收到错误的操作数错误。

private class Element {
K key;
V value;
public Element(K key, V value) {
    this.key = key;
    this.value = value;
}
public int compareTo(Element that) {
        if (key < that.key) //Error Here
            return -1;
        else if(key > that.key) //And here
            return 1;
        else
            return 0;
    }
}


现在,该类是TreeMap类的子类。同样,我不会转储整个代码,但是标头是这样的:

public class TreeMap<K extends Comparable<K>,V> implements MyMap<K,V>


现在,我到处似乎都指出拥有K extends Comparable<K>应该可以使它们具有可比性,但事实并非如此。此标头是由老师提供的,因此我认为不需要更改它。我只是俯视还是忘记某事?

最佳答案

您不能使用Comparable<比较>对象。这些仅用于数字值。相反,您可以使用如下所示的内容:

public int compareTo(Element that) {
    final int comp = key.compareTo(that.key);
    if (comp < 0)
        return -1;
    else if(comp > 0)
        return 1;
    else
        return 0;
}


或者,更好的是,返回调用compareTo()的结果:

public int compareTo(Element that) {
    return key.compareTo(that.key);
}

10-07 23:37