我想创建一个通用的 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/