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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 binghaiwang 于 2013-7-27 16:45 编辑
  1. import java.util.*;
  2. //添加自定义对象元素,进行相关排序练习
  3. class Person implements Comparable        /*自定义对象Person,因Person不具备比较性,所以实现接口Comparable,使其具备比较性*/
  4. {        
  5.         private String name;
  6.         private int age;
  7.         Person(String name,int age)
  8.         {
  9.                 this.name = name;
  10.                 this.age = age;
  11.         }
  12.         public int compareTo(Object obj)
  13.         {
  14.                 if(!(obj instanceof Person))
  15.                         throw new RuntimeException("你疯了!拿不同对象进行比较");
  16.                 Person p =(Person)obj;
  17.                 if(this.name.hashCode()>p.name.hashCode())
  18.                         return 1;
  19.                 if(this.name.hashCode()==p.name.hashCode())
  20.                 {        

  21.                         return (this.age.compareTo(p.age));//报错 无法取消引用int 如何解决?
  22.                         /*if(this.age>p.age)
  23.                                 return 1;
  24.                         if(this.age==p.age)
  25.                                 return 0;
  26.                         return -1;*/
  27.                 }
  28.                 return -1;
  29.         }
  30.         public void setName(String name)
  31.         {
  32.                 this.name = name;
  33.         }
  34.         public String getName()
  35.         {
  36.                 return name;
  37.         }
  38.         public void setAge(int age)
  39.         {
  40.                 this.age=age;
  41.         }
  42.         public int getAge()
  43.         {
  44.                 return age;
  45.         }
  46. }
  47. class  TreeSetDemo
  48. {
  49.         public static void main(String[] args)
  50.         {
  51.                 TreeSet ts = new TreeSet();
  52.                 ts.add(new Person("张三01",21));        //添加元素
  53.                 ts.add(new Person("张三02",22));
  54.                 ts.add(new Person("张三03",22));
  55.                 ts.add(new Person("张三01",24));
  56.                 ts.add(new Person("张三01",21));
  57.                 for(Iterator it = ts.iterator();it.hasNext();)
  58.                 {
  59.                         Person p = (Person)it.next();
  60.                         System.out.println(p.getName()+"..."+p.getAge());
  61.                 }
  62.                
  63.         }
  64. }
复制代码
第22行代码如何修改才可编译通过?

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 神马都是浮云

查看全部评分

4 个回复

正序浏览
就像楼上所写return this.age-p.age ;就像这个方法中所写比较的是两个参数的大小比较后所得值的大小来判断排序的位置。如下是这个方法的源码所写:
  1.     public int compareTo(String anotherString) {
  2.         int len1 = value.length;
  3.         int len2 = anotherString.value.length;
  4.         int lim = Math.min(len1, len2);
  5.         char v1[] = value;
  6.         char v2[] = anotherString.value;

  7.         int k = 0;
  8.         while (k < lim) {
  9.             char c1 = v1[k];
  10.             char c2 = v2[k];
  11.             if (c1 != c2) {
  12.                 return c1 - c2;
  13.             }
  14.             k++;
  15.         }
  16.         return len1 - len2;
  17.     }
复制代码
回复 使用道具 举报
既然返回值是大于、小于和等于0的数,那为什么不直接返回this.age-p.age呢?
回复 使用道具 举报
你也可以这样写:return this.age - p.age;这样效率会比你的那个高
回复 使用道具 举报
自己找出问题所在了。 22行改为return (new Integer(this.age).compareTo(new Integer(p.age)))即可,忘记对整数进行封装对象。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马