Java泛型、集合接口和对象类的问题
我正在尝试创建一个b-tree类,该类实现如下所示的集合接口。这里的问题是add方法接收一个对象,而我的节点类setleftNode接收一个泛型类型为“T”的节点。因此,在编译时,我得到的方法不能应用于给定的类型错误: B-树类:Java泛型、集合接口和对象类的问题,java,generics,collections,Java,Generics,Collections,我正在尝试创建一个b-tree类,该类实现如下所示的集合接口。这里的问题是add方法接收一个对象,而我的节点类setleftNode接收一个泛型类型为“T”的节点。因此,在编译时,我得到的方法不能应用于给定的类型错误: B-树类: public class BST<T> implements Collection<T>{ private Node<T> _root; private Node<T> _current; pri
public class BST<T> implements Collection<T>{
private Node<T> _root;
private Node<T> _current;
private Random _rnd = new Random();
public BST(Node<T> root) {
_root = root;
}
public Node<T> getRoot(){
return _root;
}
@Override
public Iterator iterator() {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public boolean add(Object e) {
if (this._root != null){
if(this._root.getLeftNode() == null){
this._root.setLeftNode(e);
return true;
}
}
return false;
}
公共类BST实现集合{
私有节点_根;
专用节点_当前;
私有随机数=新随机数();
公共BST(节点根){
_根=根;
}
公共节点getRoot(){
返回根;
}
@凌驾
公共迭代器迭代器(){
抛出新的UnsupportedOperationException(“尚未支持”);
}
@凌驾
公共布尔加法(对象e){
if(this.\u root!=null){
if(this.\u root.getLeftNode()==null){
这个._root.setLeftNode(e);
返回true;
}
}
返回false;
}
节点类:
public class Node<T>{
private T _value;
private Node<T> _left;
private Node<T> _right;
public Node (T value){
_value = value;
}
public T getValue(){
return _value;
}
public void setLeftNode(Node<T> node){
_left= node;
}
public void setRightNode(Node<T> rNode){
_right = rNode;
}
public Node getRightNode(){
return _right;
}
public Node getLeftNode(){
return _left;
}
}
公共类节点{
私人T_值;
私有节点_左;
私用节点(右),;
公共节点(T值){
_价值=价值;
}
公共T getValue(){
返回_值;
}
公共void setLeftNode(节点节点){
_左=节点;
}
公共void setRightNode(节点rNode){
_右=rNode;
}
公共节点getRightNode(){
返回权;
}
公共节点getLeftNode(){
返回左;
}
}
您希望您的BST类与类型T一起工作,因此您应该同样定义add方法
public boolean add(T e) {
...
}
BST<String> bst = new BST<String>();
bst.add(new String("Hello"))
公共布尔加法(te){
...
}
BST BST=新的BST();
bst.add(新字符串(“Hello”))
如果BST
实现了收集
它应该有add(te)
。并且在setLeftNode(新节点(e))内部:
@覆盖
公共布尔加法(TE){
if(this.\u root!=null){
if(this.\u root.getLeftNode()==null){
这个.u root.setLeftNode(新节点(e));
返回true;
}
}
返回false;
}
我不完全理解这个问题,但它不应该是公共布尔添加(元素){
?您似乎试图将节点
添加为集合
的元素。您可能希望公共类BST实现集合{@Override public boolean add(节点e){…
谢谢我。我想你的建议行得通。这不是B-树,而是二叉树。它们不是一回事。我试过了,但后来发现错误,集合的add方法没有被覆盖。它在我的机器上用java6编译。你有什么java版本?我使用的是java SE 7。我将构造函数转换为:公共类BST实现了集合{}。它似乎可以工作。升级后,您能否共享公共布尔添加(Object e)
的方法签名?根据java文档,有一个类似添加(te)
的方法。
@Override
public boolean add(T e) {
if (this._root != null){
if(this._root.getLeftNode() == null) {
this._root.setLeftNode(new Node<T>(e));
return true;
}
}
return false;
}