黑马程序员技术交流社区

标题: TreeMap的代码错误<已解决> [打印本页]

作者: 左建飞    时间: 2012-8-20 17:26
标题: TreeMap的代码错误<已解决>
本帖最后由 左建飞 于 2012-8-20 17:51 编辑
  1. package day16;


  2. import java.util.HashMap;
  3. import java.util.Iterator;
  4. import java.util.Map;
  5. import java.util.Set;
  6. import java.util.TreeMap;

  7. public class StudentMap
  8. {
  9.         /**
  10.          * @Map中装Student对象为key,相应地址为value。
  11.          */
  12.         public static void main(String[] args)
  13.         {
  14.                 //HashMap<Student,String> hm=new HashMap<Student,String>();
  15.                 TreeMap<Student,String> tm=new TreeMap<Student,String>();
  16.                 tm.put(new Student("zhangsan01",20), "beijing");
  17.                 tm.put(new Student("zhangsan01",20), "beijing");
  18.                 tm.put(new Student("zhangsan01",20), "tianjin");
  19.                 tm.put(new Student("zhangsan02",22), "shanghai");
  20.                 tm.put(new Student("zhangsan03",23), "tianjin");
  21.                 Set<Map.Entry<Student,String>> hs=tm.entrySet();
  22.                 for(Iterator<Map.Entry<Student,String>> it=hs.iterator();it.hasNext();)
  23.                 {
  24.                         Map.Entry<Student, String> me=it.next();
  25.                         Student stu=me.getKey();
  26.                         String add=me.getValue();
  27.                         System.out.println(stu+"^"+add);                        
  28.                 }
  29.         }
  30. }
  31. class Student implements Comparable<Student>
  32. {
  33.         private String name;
  34.         private int age;
  35.         public String getName() {
  36.                 return name;
  37.         }
  38.         public void setName(String name) {
  39.                 this.name = name;
  40.         }
  41.         public int getAge() {
  42.                 return age;
  43.         }
  44.         public void setAge(int age) {
  45.                 this.age = age;
  46.         }
  47.         Student(String name,int age)
  48.         {
  49.                 this.name=name;
  50.                 this.age=age;
  51.         }
  52.         public int compareTo(Student s)//排序根据。
  53.         {
  54.                 int num=new Integer(this.age).compareTo (new Integer(this.name));
  55.                 if(num==0)
  56.                         return this.name.compareTo(s.name);
  57.                 return num;
  58.         }
  59.         public int hashCode()//要重写hashCode方法。尽量让每个元素的返回值不同。
  60.         {
  61.                 return this.name.hashCode()+age*10;
  62.         }
  63.         public boolean equals(Object obj)//重写equals方法。
  64.         {
  65.                 if(!(obj instanceof Student))
  66.                         throw new ClassCastException("类型不匹配");
  67.                 Student s=(Student) obj;
  68.                 return this.name.equals(s.name)&&(this.age==s.age);
  69.         }
  70.         public String toString()//打印对象需要调用这个方法。
  71.         {
  72.                 return this.name+":"+this.age;
  73.         }
  74. }
复制代码
为什么使用HashMap时完全正常,一改为TreeMap就报错呀?各位高手帮我找找错误吧。

作者: 王少岩    时间: 2012-8-20 17:43
第57行int num=new Integer(this.age).compareTo (new Integer(this.name));
应该是int num=new Integer(this.age).compareTo (new Integer(s.age));
作者: 唐杨老师    时间: 2012-8-20 17:46
本帖最后由 唐杨 于 2012-8-20 17:48 编辑

把57行该成这个就可以了..

  int num = new Integer(this.age).compareTo (new Integer(s.age));

呵呵,你挺有意思.把年龄跟名字放一起比较.这个把数字转成字符串.利用Integer的方法倒是不错,值得借鉴
快给分.
作者: 左建飞    时间: 2012-8-20 17:50
我什么也没问,你们什么也没看见。。。




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