gpt4 book ai didi

java - 使用通用 Comparable 数据在 Java 中实现二叉树?

转载 作者:行者123 更新时间:2023-12-01 07:24:44 26 4
gpt4 key购买 nike

问:在我实现下面的二叉树时,为什么编译器会在

处卡住

if (data.compareTo(this.data) <= 0) ,

制作

Error: incompatible types: java.lang.Comparable<T> cannot be converted to T

两者datathis.data类型为Comparable<T>并且应该能够使用compareTo()方法或作为compareTo()方法的参数......对吗?嗯,显然不是。但我实在不明白为什么。泛型仍然让我困惑。

public class MyBinaryTreeNodeG<T>{
Comparable<T> data;
MyBinaryTreeNodeG<T> parent;
MyBinaryTreeNodeG<T> left;
MyBinaryTreeNodeG<T> right;

public MyBinaryTreeNodeG(Comparable<T> data){
this.data = data;
}

public MyBinaryTreeNodeG<T> addChild(Comparable<T> data){
if (data.compareTo(this.data) <= 0) { //this is the line on which the compiler chockes
//check if left tree node is null. If so, add. Otherwise, recurse.
} else {
//same for the right tree node
return null;
}

以下是来自二叉树的更标准实现的剪辑。这编译得很好。但我仍然不明白为什么这是一个比我上面的实现“更好”(根据编译器)的实现。

public class MyBinaryTreeNodeG<T extends Comparable<T>>{
T data;
MyBinaryTreeNodeG<T> parent;
MyBinaryTreeNodeG<T> left;
MyBinaryTreeNodeG<T> right;

public MyBinaryTreeNodeG(T data){
this.data = data;
}

public MyBinaryTreeNodeG<T> addChild(T data){
if (data.compareTo(this.data) <= 0) {
//left node stuff
} else {
//right node stuff
return null;
}

最佳答案

如果有 Comparable<T> ,它相当于 T ,无法与 Comparable<T> 相比较。这就是第二个片段起作用的原因。

关于java - 使用通用 Comparable<T> 数据在 Java 中实现二叉树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27155596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com