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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zcbyzcb 中级黑马   /  2013-6-13 14:30  /  1372 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zcbyzcb 于 2013-6-13 21:36 编辑

今天在学到TreeSet集合的时候,自定义一个Person类,然后向TreeSet里边添加Person对象,可是已经实现了Comparable接口,还是一个对象都加不进去,代码如下:
  1. import java.util.*;
  2. class TreeSetDemo2
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 TreeSet ts=new TreeSet();
  7.                 Person p=new Person("zhang",12);
  8.                 ts.add(p);
  9.                 //ts.add(456);
  10.                 //ts.add(789);
  11.                 //ts.add(789);
  12.                 //Person p=new Person("zhang",12);
  13.                 //sop(p.getName()+"----"+p.getAge());
  14.                 Iterator it=ts.iterator();
  15.                 while(it.hasNext())
  16.                 {
  17.                         sop(it.next());
  18.                 }
  19.         }

  20.         public static void sop(Object obj)
  21.         {
  22.                 System.out.println(obj);
  23.         }
  24. }
  25. class Person implements        Comparable
  26. {
  27.         private String name;
  28.         private int age;
  29.         Person(String name, int age)
  30.         {
  31.                 this.name=name;
  32.                 this.age=age;
  33.         }
  34.         public String getName()
  35.         {
  36.                 return this.name;
  37.         }
  38.         public int getAge()
  39.         {
  40.                 return this.age;
  41.         }

  42.         public int CompareTo(Object obj)
  43.         {
  44.                 if(!(obj instanceof Person))
  45.                 {
  46.                         throw new RuntimeException("不是本类对象");
  47.                 }
  48.                 Person p=(Person)obj;
  49.                 if(this.age>p.age)
  50.                         return 1;
  51.                 if(this.age==p.age)
  52.                         return 0;
  53.                
  54.                 return -1;
  55.         }
  56. }
复制代码
求解,大神们看看,是哪出错了。

10 个回复

倒序浏览
*         if(!(arg0 instanceof Person))
             {
                     throw new RuntimeException("不是本类对象");
             }*/
错误在这一句,还有你CompareTo 最好用复制的,你自己写容易错

评分

参与人数 1技术分 +1 收起 理由
黑马伍哲沂 + 1 赞一个!

查看全部评分

回复 使用道具 举报
import java.util.*;
class dfdf
{
        public static void main(String[] args)
        {
                TreeSet ts=new TreeSet();
                Person1 p=new Person1("zhang",12);
                ts.add(p);
                //ts.add(456);
                //ts.add(789);
                //ts.add(789);
                //Person p=new Person("zhang",12);
                //sop(p.getName()+"----"+p.getAge());
                Iterator it=ts.iterator();
                while(it.hasNext())
                {
                        sop(it.next());
                }
        }

        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
}
class Person1 implements        Comparable
{
        private String name;
        private int age;
        Person1(String name, int age)
        {
                this.name=name;
                this.age=age;
        }
        public String getName()
        {
                return this.name;
        }
        public int getAge()
        {
                return this.age;
        }

      
                @Override
                public int compareTo(Object arg0) {
                /*         if(!(arg0 instanceof Person))
             {
                     throw new RuntimeException("不是本类对象");
             }*/
             Person1 p=(Person1)arg0;
             if(this.age>p.age)
                     return 1;
             if(this.age==p.age)
                     return 0;
            
             return -1;
                }
}
回复 使用道具 举报
你再运行我的代码,相信你会有所收获!
回复 使用道具 举报
你的问题,最后应该是没有覆盖那个
                public int compareTo(Object arg0)方法! 变量名不要改。不要用OBJ 用arg0
回复 使用道具 举报
@Override
                public int compareTo(Object o)  //记住这个规范。方法的第一个单词首字母一般都是小写


其他地方没错。就是方法名字写错了。改成小写就可以了
回复 使用道具 举报
我也看了,但是一直没复习,有点忘记了
回复 使用道具 举报
你可以单独定义一个比较器,implements Comparator(Person p)
回复 使用道具 举报
自己犯二了,原来Compare没有首字母没小写,没有复写compareTo方法
回复 使用道具 举报
画饼 发表于 2013-6-13 14:54
你的问题,最后应该是没有覆盖那个
                public int compareTo(Object arg0)方法! 变量名不要 ...

多谢啦,自己编程太粗心了
回复 使用道具 举报
zcbyzcb 发表于 2013-6-13 21:35
多谢啦,自己编程太粗心了

加油了。。。出错谁都会有的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马