制作二叉搜索树会引发异常

时间:2010-12-13 17:02:23

标签: java binary-tree

其他人说,为了制作一个{3,7,1,90,45,67,54,23,...}数组的二叉搜索树,最好使用TreeSet。但是下面的代码会引发异常,我不知道为什么?我的数组列表"array"包含100 objects,每个对象都有two fields 1)digit 2)name,我想用这些对象的数字字段创建BST。请帮助我。

     TreeSet<Element> set = null;
     set = new TreeSet<Element>();
     for(Element e :array){
         set.add(e);
     }

    Iterator it1 = set.iterator();

    while (it1.hasNext()) {
        Object o1 = it1.next();
        System.out.println(o1);
    }

例外:

Exception in thread "main" java.lang.ClassCastException: OBST.Element cannot be cast to java.lang.Comparable
    at java.util.TreeMap.put(TreeMap.java:542)
    at java.util.TreeSet.add(TreeSet.java:238)
    at OBST.GreedyVersion.<init>(GreedyVersion.java:25)
    at OBST.GreedyVersion.main(GreedyVersion.java:66)

这是因为行:set.add(e);

4 个答案:

答案 0 :(得分:6)

这是一个非常糟糕的问题。在你的另一个问题(和这里),你说你有一个{3,7,1,90,45,67,54,23,...}。但是你宣布你的集TreeSet<Element> set。那你真的有什么?你有一个整数数组吗?或者它是Elements

的数组

如果它确实是一个元素数组,错误消息确切地说明了问题所在,那么Element类必须实现Comparable

答案 1 :(得分:4)

您的Element课程没有实现Comparable所需的TreeSet界面。

Comparable上实施Element界面会强制您实施compareTo方法。这将定义Element 类型的对象如何相互排列TreeSet需要这样做,以便它知道在树中放置每个Element的方式和位置。

答案 2 :(得分:0)

Java仅支持TreeSet中的可排序元素。要使元素可排序,必须实现Comparable interface

答案 3 :(得分:0)

我认为你收到了这个错误,因为你添加的元素没有实现Comparable接口。它是什么类型的数组?