不确定这里发生了什么。看起来像一个自动拳击问题,但我已经坚持了一段时间,并认为它可能有利于我停止压力,并获得一些更有经验的手。该分配实质上是实现BST并将其扩展到AVL的实现,然后运行性能测试。为简化起见,我们可以坚持使用Integer作为通用。
我遇到的问题是比较两个节点。没有进行自动装箱,并且无法识别intValue()方法。
public class BinaryNode<Integer> implements Comparable<Integer>
{
Integer data;
BinaryNode<Integer> leftChild;
BinaryNode<Integer> rightChild;
int height;
BinaryNode(Integer data)
{
this(data, null, null);
}
BinaryNode(Integer data, BinaryNode<Integer> lt, BinaryNode<Integer> rt)
{
this.data = data;
this.leftChild = lt;
this.rightChild = rt;
}
public Integer getData()
{
return this.data;
}
public BinaryNode<Integer> getLeft()
{
return leftChild;
}
public void setLeft(BinaryNode newNode)
{
this.leftChild = newNode;
}
public BinaryNode<Integer> getRight()
{
return rightChild;
}
public void setRight(BinaryNode newNode)
{
this.rightChild = newNode;
}
@Override
public int compareTo(BinaryNode<Integer> otherNode)
{
return this.getData() - otherNode.getData();
}
}
编辑:感谢您的快速反馈。这只是我需要以不同的方式看待这种互动,并理解我遇到的古怪行为。不幸的是,我必须使这个BinaryNode成为一个通用类,但诀窍是将所有的更换为或者本书的惯例更喜欢使用。
最佳解决方案是更改BinaryNode&lt; Integer&gt;到BinaryNode&lt; AnyType&gt;并从此类中删除compareTo。现在我不再为java.lang.Integer蒙上阴影了,我可以像我原先预期的那样可靠地使用Integer.compareTo方法。
对于好奇,这里是我必须与之交互的TreePrinter类,它使用参数化的BinaryNode类。 http://www.cs.sjsu.edu/~mak/CS146/assignments/3/TreePrinter.java
答案 0 :(得分:1)
在class BinaryNode<Integer>
中,Integer是泛型类型参数,而不是Integer类。
变化
public class BinaryNode<Integer> implements Comparable<Integer>
到
public class BinaryNode implements Comparable<Integer>
并将BinaryNode<Integer>
的任何外观更改为BinaryNode
。
如果您希望BinaryNode类采用通用数据类型,则不会编写特定于Integer数据类型的代码(例如,如果return this.getData() - otherNode.getData()
返回某些通用,则getData()
将永远不会编译类型参数T)。
答案 1 :(得分:1)
public class BinaryNode<Integer> implements Comparable<Integer>
表示您有一个名为Integer
的新泛型类型。这不是java.lang.Integer
。这就是你遇到问题的原因,因为它们完全不同。
Soritos Delimanolis指出,最好完全放弃通用类型。