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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曹德君 中级黑马   /  2013-4-26 11:50  /  1474 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 曹德君 于 2013-4-26 21:05 编辑
  1. import java.util.*;

  2. class  TreeSetDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                
  7.                 TreeSet ts = new TreeSet();
  8.                 ts.add(new Person("lisi001",10));
  9.                 ts.add(new Person("lisi002",20));
  10.                 ts.add(new Person("lisi003",30));
  11.                 ts.add(new Person("lisi004",40));
  12.                 ts.add(new Person("lisi007",40));
  13.                 ts.add(new Person("lisi002",40));

  14.                 for (Iterator it=ts.iterator();it.hasNext(); )
  15.                 {
  16.                         //Object obj =it.next();这里有类型提升。必须强转成Person才能输出名字和年龄。
  17.                         Person p = (Person)it.next();
  18.                         sop(p.getName()+"..m.."+p.getAge());
  19.                 }
  20.         }
  21.         public static void sop(Object obj)
  22.         {
  23.                 System.out.println(obj);
  24.         }
  25. }

  26. class Person implements Comparable
  27. {
  28.         private String name;
  29.         private int age;

  30.         Person(String name,int age)
  31.         {
  32.                 this.name=name;
  33.                 this.age=age;
  34.         }
  35.         public String getName()
  36.         {
  37.                 return name;
  38.         }
  39.         public int getAge()
  40.         {
  41.                 return age;        
  42.         }
  43.         public int compareTo(Object obj)
  44.         {        
  45.                 if (!(obj instanceof Person))
  46.                 {
  47.                         throw new RuntimeException("不是Person对象");//1疑问这里为什么要抛出RuntimeException异常?用horows抛为什么不行??
  48.                 }
  49.                 Person  p=(Person)obj;
  50.                 if (this.age>p.age)
  51.                         return 1;
  52.                 if (this.age==p.age)
  53.                         //字符串本身也具备比较性String类里面的comparaTo()方法
  54.                         return this.name.compareTo(p.name);
  55.                 return  -1;
  56.         }
  57.         
  58. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

7 个回复

倒序浏览
RuntimeException是运行时异常。意思是程序只要出现这种异常就要断掉。因为你的传递的对象都不同,根本就没有比较的意义了。程序就必须断掉。
如果用throws抛出异常的话,表示这个方法就有异常。别人调用的这个方法也要抛出这个异常。就是Person类,compareTo方法是Comparable接口中的方法,compareTo本身没没有抛出RuntimeException,你不能比自己的父类抛出更多的异常吧。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
1.RuntimeException:这是运行时异常,就是java程序在运行时期才会发生的异常,java默认给这个异常特殊的权限,就是不用在函数上声明,程序自动停止。
2.如果在函数上抛异常,那主函数调用时,就要做异常处理,增加了不必要的麻烦。具体情况根据需求而定。
回复 使用道具 举报
谭威 发表于 2013-4-26 13:03
RuntimeException是运行时异常。意思是程序只要出现这种异常就要断掉。因为你的传递的对象都不同,根本就没 ...

你说的我有点糊涂了。你的意思是不让抛RuntimeException吗????
回复 使用道具 举报
楼主看看异常的概念,以及各种区别能好点,这样的帖子我发了太多了。
回复 使用道具 举报
曹德君 发表于 2013-4-26 13:51
你说的我有点糊涂了。你的意思是不让抛RuntimeException吗????

我的意思是在你的程序里面,可以抛RuntimeException,这是程序逻辑需要。你传的不是person对象,我怎么比较啊,可以直接让程序停掉掉,这时就可以throw new RuntimeException("..");,但是绝对不能在compareTo方法上throws 任何Exception,因为这个方法不是你写的。是Comparable自己的方法,它自己都没抛,你如果throws了,那就不叫实现接口的方法了。
回复 使用道具 举报
哦明白了。谢谢。
回复 使用道具 举报
楼主如果明白了    就把帖子的类型改为“已解决”。{:soso_e181:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马