我现在在尝试使用通用数据类型对二进制搜索树建模时遇到问题。我最终将读取字符串值并将其插入到二叉树中,因此在Nodez类中声明了字符串。 Nodez类是我定义的一个类,用于声明要传递给搜索树的节点。字符串值将是此类的一个属性。 BSTree基于定义如下的类:

public class BSTree<E extends Comparable<E>> implements BSTreeAPI<E>


我的问题在于代码的主要块。当我尝试插入Nodez类的实例时发生错误。这里的确切错误指出:“不兼容的类型:Nodez无法转换为Comparable”

我花了很多时间尝试调试它,但是我对泛型不是很满意吗?

有什么建议吗?谢谢!

package twotreesanalyzer;
import java.io.IOException;
import java.io.PrintStream;
import java.util.function.Function;

public class TwoTreesAnalyzer
{

    public static class Nodez <E extends Comparable<E>> {
        public String x;
        public E node;

        public String get(){
            return x;
        }
    }

public static void main(String[] args) throws AVLTreeException, BSTreeException, IOException
    {

        Function<String, PrintStream> printUpperCase = x -> System.out.printf("%S", x);

        BSTree bstTest = new BSTree();

        Nodez e1 = new Nodez();
        e1.x = "fresh";


        bstTest.insert(e1);

        System.out.println(bstTest.inTree(e1.get()));

    }
}

最佳答案

现在,您的BSTree试图比较您的nodez对象,如果这是您希望其运行的方式,则需要在Nodez类上实现Comparible。我以收集树为例快速修复了它。

public static class Nodez <E extends Comparable<E>> implements Comparable<Nodez<E>>{
        public String x;
        public E node;

        public String get(){
            return x;
        }

        @Override
        public int compareTo(Nodez<E> node) {
            return node.x.compareTo(x);
        }
    }

public static void main(String[] args) throws IOException
    {

        Function<String, PrintStream> printUpperCase = x -> System.out.printf("%S", x);

        TreeSet<Nodez<String>> bstTest = new TreeSet<>();

        Nodez<String> e1 = new Nodez<>();
        e1.x = "fresh";


        bstTest.add(e1);

        System.out.println(bstTest.contains(e1));

    }


但是,我认为您希望节点能够接受任何可比较的通用类型,在这种情况下,应将其排序如下:

public static class Nodez <E extends Comparable<E>> implements Comparable<Nodez<E>>{
        public E x;
        public Nodez<E> node;

        public E get(){
            return x;
        }

        @Override
        public int compareTo(Nodez<E> node) {
            return node.x.compareTo(x);
        }
    }

public static void main(String[] args) throws IOException
    {

        Function<String, PrintStream> printUpperCase = x -> System.out.printf("%S", x);

        TreeSet<Nodez<String>> bstTest = new TreeSet<>();

        Nodez<String> e1 = new Nodez<>();
        e1.x = "fresh";


        bstTest.add(e1);

        System.out.println(bstTest.contains(e1));
    }

09-30 14:01