黑马程序员技术交流社区

标题: TreeSet集合练习中遇到的小问题,请教下各位高手。 [打印本页]

作者: binghaiwang    时间: 2013-7-27 16:26
标题: TreeSet集合练习中遇到的小问题,请教下各位高手。
本帖最后由 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行代码如何修改才可编译通过?
作者: binghaiwang    时间: 2013-7-27 16:45
自己找出问题所在了。 22行改为return (new Integer(this.age).compareTo(new Integer(p.age)))即可,忘记对整数进行封装对象。
作者: 于世德    时间: 2013-7-27 17:20
你也可以这样写:return this.age - p.age;这样效率会比你的那个高
作者: 刘张朋    时间: 2013-7-27 17:31
既然返回值是大于、小于和等于0的数,那为什么不直接返回this.age-p.age呢?
作者: sergio    时间: 2013-7-29 22:14
就像楼上所写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.     }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2