【问题标题】:how can i implement generic BST?我怎样才能实现通用 BST?
【发布时间】:2019-07-07 14:07:23
【问题描述】:

我想创建一个通用的 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 扩展 Comparable? 或工具? 最后关键是整数, 那么有什么办法呢?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!我是否必须更改为:public class ThreadedGenericNode, V> implements Comparable, V>> 还是你写的就够了?
    • 尝试编译你刚刚编写的内容 :) 你会在第二个可比较中得到一个意外绑定的错误。
    • 谢谢!!你的问题是对的,这是家庭作业,我用int做了,现在我们学习通用,所以我想做那个通用的。非常感谢!!!
    猜你喜欢
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 2022-12-08
    • 2021-10-01
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    相关资源
    最近更新 更多