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

a245066003 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的方法呢?
...全文
432 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
戴小码 2017-08-15
  • 打赏
  • 举报
回复
treeSet是有序的,所以需要Comparable接口的compareTo的方法,该方法内部是实现比较的算法,楼主如果有自己的比较的算法,也可以实现该接口并复写该方法,实现自己的比较输出。
  • 打赏
  • 举报
回复
楼上已经回答的很清楚了,关于排序和比较你还可以参考:http://blog.csdn.net/luminji/article/details/76977435
三仙半 2017-08-09
  • 打赏
  • 举报
回复
TreeSet 是有序的,增加进去的对象,必须实现Comparable<T>接口。
  • 打赏
  • 举报
回复
你的Person类没有实现Comparable接口,你的报错原因上面写着不能转换,就是因为你没实现这个接口,至于你问的为什么要实现这个接口,你可以去看下源代码,通俗的讲,treeSet是有序的,你总要告诉程序以什么条件来排序吧
soton_dolphin 2017-08-07
  • 打赏
  • 举报
回复
或者你可以实现一个Comparator 借口,在创建TreeSet的时候传到构造器里面,然后再添加元素
Kevin_K2 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集合 就是调用这个方法比较的

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧