我如何实现通用BST?

时间:2019-07-07 14:07:23

标签: java generics tree binary binary-search-tree

我想创建一个通用的bst,每个节点都有键和值,方法将由键起作用。 我是否需要在Tree类中扩展可比性?还是仅在节点类中?

我试图找出是否必须通过节点或仅通过其足够的键来扩展可比性。


public class ThreadedGenericNode<K,V> implements Comparable<ThreadedGenericNode<K,V>>
{
    K _key;
    V _value;
    private ThreadedGenericNode _right;
    private ThreadedGenericNode _left;
    private ThreadedGenericNode _parent;
    private boolean isThreadedRight;
    private boolean isThreadedLeft;


    public ThreadedGenericNode(K key,V value)
    {
        this._right = null;
        this._left = null;
        this._parent = null;
        this.isThreadedLeft = true;
        this.isThreadedRight = true;
        this._key = key;
        this._value = value;
    }




       @Override
    public int compareTo(ThreadedGenericNode<K, V> o) {

        if(this._key > o._key)
            return 1;

        return 0;
    }


}

我得到了编译错误:“对于参数类型K,未定义运算符>”

所以我必须用K扩展比较吗? 或工具? 最终,密钥将为整数, 那怎么办呢?

1 个答案:

答案 0 :(得分:1)

您不能将<运算符与泛型一起使用。例如,如果您通过String类型输入为K,则使用>运算符会发生什么?此外,在运行时,泛型类型被擦除为Object

您最好的选择是确保K将实现Comparable接口并在您的compareTo类型上使用K。因此,您应该在K上使用有界类型:

public class ThreadedGenericNode<K extends Comparable<K>, V> implements Comparable<ThreadedGenericNode<K, V>> {
    K _key;

    .......

    @Override
    public int compareTo(ThreadedGenericNode<K, V> o) {

        return this._key.compareTo(o._key);
    }
}

如果您最后说K只会是一个整数-那么使用泛型有什么意义呢?通过使用泛型,您希望能够灵活地将类与不同类型一起使用,并且仍然可以对这些类型进行编译时检查。