A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. import java.util.Comparator;


  2. public class MyComparator implements Comparator
  3. {
  4.         public int compare(Object o1, Object o2)
  5.         {
  6.                 String s1 = (String)o1;
  7.                 String s2 = (String)o2;
  8.                 int i = s1.length() - s2.length();
  9.                 return i==0?s1.compareTo(s2):i;
  10.         }
  11. }
  12. [code]import java.util.Iterator;
  13. import java.util.TreeSet;


  14. public class TreeSetTest
  15. {
  16.         public static void main(String[] args)
  17.         {
  18.                 TreeSet ts = new TreeSet(new MyComparator());
  19.                 ts.add("asdf");
  20.                 ts.add("sdfds");
  21.                 ts.add("as");
  22.                 ts.add("d");
  23.                 ts.add("sdf");
  24.                 ts.add(new ALPerson("xiao", 12));
  25.                 for(Iterator it=ts.iterator();it.hasNext();)
  26.                 {
  27.                         System.out.println(it.next());
  28.                 }
  29.         }
  30. }
复制代码
[/code]
如上 我又加入了一个自定义的Person 集合是用来存储对象的 我加入了 new Person后出现了 ClassCastException 这是为什么 啊

2 个回复

倒序浏览
犹豫铅笔 来自手机 中级黑马 2014-9-12 01:32:37
沙发
TreeSet会将集合中的元素排序,这里当向TreeSet集合中添加元素时,会调用MyComparator中的方法 compare(Object o1, Object o2) 确定新加入元素的位置,在此过程中,新加入的元素会多次作为此函数的一个参数,在此题中compare函数会尝试将Person对象转换为字符串,会发生类型转换错误
回复 使用道具 举报
楼上正解!
ClassCastException 是类型强制转换错误,在比较器中,你将Object对象强制转化为String对象,而ALPerson是你的自定类,无法转化为String对象的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马