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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

这是毕老师的基础视频的有一个练习题,是TreeMap的练习,以下是我写的代码:
  1. /*
  2. * 需求:对学生对象的年龄进行升序排序。
  3. *
  4. * 因为数据是以键值对形式存在的。
  5. * 所以要使用可以排序的Map集合。TreeMap
  6. */
  7. package com.haihang.MapDemo;
  8. import java.util.*;

  9. //学生类
  10. class Student implements Comparable<Student>{
  11.         private String name;
  12.         private int age;
  13.         
  14.         Student(String name,int age){
  15.                 this.name = name;
  16.                 this.age = age;
  17.         }
  18.         
  19.         //让student类具有比较性顺序,一般用在二叉树原理的集合类
  20.         public int compareTo(Student s){
  21.                 //按年龄进行排序
  22.                 int num  = new Integer(this.age).compareTo(new Integer(s.age));
  23.                 if(num == 0)
  24.                         return this.name.compareTo(s.name);
  25.                 return num;
  26.         }
  27.         
  28.         //复写哈希表
  29.         public int hashCode(){
  30.                 return name.hashCode()+age*34;
  31.         }
  32.         
  33.         public boolean equals(Object obj){
  34.                 if(!(obj instanceof Student))
  35.                         throw new ClassCastException("类型不匹配");
  36.                
  37.                 Student st = (Student)obj;
  38.                 return this.name.equals(st.name) && this.age==st.age;
  39.         }
  40.         
  41.         public String getName(){
  42.                 return name;
  43.         }
  44.         
  45.         public int getAge(){
  46.                 return age;
  47.         }
  48.         
  49. }

  50. //设置比较器,对学生进行判断,确定学生唯一性
  51. class MyCompare implements Comparator<Student>{
  52.         public int compare(Student obj1,Student obj2){
  53.                
  54.                 int num= obj1.getName().compareTo(obj2.getName());
  55.                
  56.                 if(num == 0){
  57.                         return new Integer(obj1.getAge()).compareTo(new Integer(obj2.getAge()));
  58.                 }
  59.                
  60.                 return num;
  61.         }
  62. }

  63. public class MapTest2 {

  64.         public static void main(String[] args) {
  65.                 TreeMap<Student,String> tm = new TreeMap<Student, String>(new MyCompare());
  66.                
  67.                 //添加元素
  68.                 tm.put(new Student("zhangsan1",19), "北京");
  69.                 tm.put(new Student("zhangsan2",30), "上海");
  70.                 tm.put(new Student("zhangsan3",20), "深圳");
  71.                
  72.                 Set<Map.Entry<Student, String>> entrymap = tm.entrySet();
  73.                
  74.                 Iterator<Map.Entry<Student, String>> it = entrymap.iterator();
  75.                
  76.                 while(it.hasNext()){
  77.                         Map.Entry<Student, String> me = it.next();
  78.                         Student key = me.getKey();
  79.                         //System.out.println(key.getName()+":"+key.getAge()+":::"+me.getValue());
  80.                         System.out.println(key+":::"+me.getValue());
  81.                 }
  82.         }

  83. }
复制代码


在最后一行代码中这样的书写System.out.println(key+":::"+me.getValue());  得到的是这个结果:第一张图

但是在老师的教学视频中,运行处的结果是:第二张图

为什么会出现这样的状况呢?

QQ截图20150504213313.png (8.94 KB, 下载次数: 0)

QQ截图20150504213313.png

QQ截图20150504213452.png (9.28 KB, 下载次数: 0)

QQ截图20150504213452.png

6 个回复

倒序浏览
那个key是个Student对象啊~打印key不就是打印它的地址吗~视频中老师也是直接输出key吗?
回复 使用道具 举报
ZSMAN 发表于 2015-5-5 14:41
那个key是个Student对象啊~打印key不就是打印它的地址吗~视频中老师也是直接输出key吗? ...

对的呀,我看到他是直接输出Key的,但是我这样写就是不能输出
回复 使用道具 举报
qinhaihang 发表于 2015-5-5 17:12
对的呀,我看到他是直接输出Key的,但是我这样写就是不能输出

将Student类的toString方法重写:
class Student implements Comparable<Student>{
        private String name;
        private int age;
        
        Student(String name,int age){
                this.name = name;
                this.age = age;
        }
        
        //让student类具有比较性顺序,一般用在二叉树原理的集合类
        public int compareTo(Student s){
                //按年龄进行排序
                int num  = new Integer(this.age).compareTo(new Integer(s.age));
                if(num == 0)
                        return this.name.compareTo(s.name);
                return num;
        }
        
        //复写哈希表
        public int hashCode(){
                return name.hashCode()+age*34;
        }
        
        public boolean equals(Object obj){
                if(!(obj instanceof Student))
                        throw new ClassCastException("类型不匹配");
               
                Student st = (Student)obj;
                return this.name.equals(st.name) && this.age==st.age;
        }
        
        public String getName(){
                return name;
        }
        
        public int getAge(){
                return age;
        }
                public String toString(){
               
                return name+":"+age;
                }
        

}
回复 使用道具 举报
ZSMAN 发表于 2015-5-5 17:34
将Student类的toString方法重写:
class Student implements Comparable{
        private String name;

哦哦,明白了,还是漏了点东西,谢谢了
回复 使用道具 举报
恩,就是没有复写toString的方法而已哈!
回复 使用道具 举报
恩,就是没有复写toString的方法而已哈!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马