其他人说,为了制作一个{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);
答案 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接口。它是什么类型的数组?