java - 我如何实现通用 BST?

标签 java generics tree binary binary-search-tree

我想创建一个通用的 bst ,每个节点都有键和值,方法和将按键工作。 我是否必须在树类中扩展可比性?或者仅在节点类中?

我试图弄清楚我是否必须通过节点来扩展可比较的,或者仅通过键来扩展就足够了。


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 extends Comparable 吗? 或实现? 最后 key 将是整数, 那么有什么方法可以做到这一点呢?

最佳答案

您不能使用<带有泛型的运算符。例如,如果您通过 String输入 K使用 > 会发生什么运算符(operator) ?此外,在运行时泛型类型被删除为 Object .

您最好的选择是确保K将实现Comparable接口(interface)及使用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将只是一个整数 - 那么使用泛型有什么意义呢?通过使用泛型,您希望能够灵活地使用具有不同类型的类,并且仍然可以对这些类型进行编译时检查。

关于java - 我如何实现通用 BST?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56922863/

相关文章:

java - 在映射中强制执行泛型(与键/值泛型相关)

javascript - 通过 JQuery Tree 查看文本文件

c++ - 是否可以在 CUDA 中并行处理二叉树数组?

java - 为什么在笔记本电脑上成功创建了我的Java docker镜像,但是上传到Google Cloud时却失败了?

java - 产生 IllegalStateException 的基于登录的应用程序

C# 泛型类与泛型方法

c# - 继承和 'Curiously Recurring Template Pattern'

google-apps-script - 试图创建谷歌驱动器文件夹的 TreeView

java - 每次给出“生成 JavaDoc”命令时,javadoc 是否都会扫描所有类?

java - 使用 AOP 的 Spring session 范围 bean 中的问题