新手刚学到TreeSet集合遇到一个问题,请教各位大神解答一下

a245066003 java实习  2017-08-06 08:24:21
TreeSet ts = new TreeSet();

ts.add(new Person("zhangsan",28));
// ts.add(new Person("xiaoqiang",21));
// ts.add(new Person("wangu",23));
// ts.add(new Person("lisi",29));

Iterator it = ts.iterator();
while(it.hasNext()) {
Person p = (Person)it.next();
System.out.println(p.getName()+"....."+p.getAge());
}
报的错误:
Exception in thread "main" java.lang.ClassCastException: cn.itcast.bean.Person cannot be cast to java.lang.Comparable
at java.util.TreeMap.compare(Unknown Source)
at java.util.TreeMap.put(Unknown Source)
at java.util.TreeSet.add(Unknown Source)
at cn.itcast.treeset.demo.TreeSetDemo.main(TreeSetDemo.java:17)

这个是为什么呢?我是照着毕向东的java基础视频学的,他的视频里,把其他三个添加的元素注释掉后,是可以取出第一个zhangsam,28的元素的。但是我为什么这样会报错呢?有点不太理解了。
希望各位帮帮忙解答下。
另外帮忙告知下这个集合什么意思,为什么要实现Comparable接口复写里面的compareTo的方法呢?
...全文
345 点赞 收藏 8
写回复
8 条回复
戴小码 2017年08月15日
treeSet是有序的,所以需要Comparable接口的compareTo的方法,该方法内部是实现比较的算法,楼主如果有自己的比较的算法,也可以实现该接口并复写该方法,实现自己的比较输出。
回复 点赞
码农星球撸码J 2017年08月10日
楼上已经回答的很清楚了,关于排序和比较你还可以参考:http://blog.csdn.net/luminji/article/details/76977435
回复 点赞
三仙半 2017年08月09日
TreeSet 是有序的,增加进去的对象,必须实现Comparable<T>接口。
回复 点赞
小个子程序员2 2017年08月09日
你的Person类没有实现Comparable接口,你的报错原因上面写着不能转换,就是因为你没实现这个接口,至于你问的为什么要实现这个接口,你可以去看下源代码,通俗的讲,treeSet是有序的,你总要告诉程序以什么条件来排序吧
回复 点赞
soton_dolphin 2017年08月07日
或者你可以实现一个Comparator 借口,在创建TreeSet的时候传到构造器里面,然后再添加元素
回复 点赞
poc999 2017年08月07日
往TreeSet里面添加 第一个元素不需要比较,后面添加进去的元素会依次和每一个元素比较。 添加对象进去如果你自己不定义比较方法。 TreeSet不知道如何排序。 TreeSet 的底层是 红黑树的实现。希望你能够明白。
回复 点赞
李德胜1995 2017年08月06日
java.lang.ClassCastException: cn.itcast.bean.Person cannot be cast to java.lang.Comparable。。。 Person需要实现Comparable接口。。。。
回复 点赞
weixin_38713117 2017年08月06日
TreeSet 是一个有序的集合,要有序必须要有比较的方法,java的TreeSet集合 就是调用这个方法比较的
回复 点赞
发动态
发帖子
Java SE
创建于2007-09-28

3.4w+

社区成员

30.7w+

社区内容

Java 2 Standard Edition
社区公告
暂无公告