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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

null001

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© null001 初级黑马   /  2014-2-15 16:57  /  1400 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.*;

class Student  implements Comparable<Student>
{
        private String name;
        private int age;
        Student(String name,int age)
        {
                this.name=name;
                this.age=age;
        }

        public int hashCode()
        {
                return name.hashCode()+age*34;
        }
        public boolean equals(Object obj)
        {
                if(! (obj instanceof Student))
                         throw new ClassCastException("类型不对");

                Student s =(Student)obj;

                return this.name.equals(s.name) && this.age==s.age;
        }

        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 String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
}

class MapTest
{
        public static void main(String[] args)
        {
                HashMap<Student,String> hm =new HashMap<Student,String>();

                hm.put(new Student("zhangsan",1),"bj");
                hm.put(new Student("lisi",2),"sh");
                hm.put(new Student("wangwu",1),"gz");

                Set<Map.Entry<Student,String>> entrySet = hm.entrySet();

                Iterator<Map.Entry<Student,String>> it = entrySet.iterator();

                while(it.hasNext())
                {
                        Map.Entry<Student,String> me = it.next();

                        Student stu = me.getKey();
                        String add = me.getValue();

                        System.out.println(stu+".."+add);

                       
                }
        }
}

为什么打印的结果是这样?
Student@aa9c3096..bj
Student@d09b2c43..gz
Student@32b0d7..sh

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

8 个回复

倒序浏览
不能沉了啊
回复 使用道具 举报
System.out.println(stu+".."+add);    我是新手  应该是这句话的问题  你输出的是stu的地址   你应该是这样的System.out.println(stu.getName()+".."+add);   最后的结果是   名字...地址    的形式   

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
因为调用的是Object类的toString()方法,
      返回getClass().getName() + '@' + Integer.toHexString(hashCode())
你可以在Student类中自己定义个toString()方法,覆盖掉Object的就好了

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报 1 0
这是因为Student类没有重写toString方法
回复 使用道具 举报
重写toString方法,我刚接触这的时候也犯这样的迷糊。
回复 使用道具 举报
因为所有java类的父类都是Object,你这里System.out.println(stu+".."+add);意思是想打印出这个学生姓名年龄,调用的是你定义的Student的toString()方法,但是你没有覆盖重写父类Object的toString()方法,所以使用的还是Object类的toString()方法,返回getClass().getName() + '@' + Integer.toHexString(hashCode()),查看Object的toString()方法就知道为啥是这样的格式了。所以你可以在Student类中定义自己的toString()方法,输出你想输出的内容就可以了。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
你重写一下student类的toString方法就行了,显示什么你可以在toString里自己定义
回复 使用道具 举报
System.out.println(stu+".."+add);你map集合的键值时学生对象。。所以你stu是一个学生对象,打印出来的当然是该对象的地址值。如果你想打印该学生的姓名跟年龄可以通过getName()和getAge()来获得,或者复写Student  中的toString()方法。。

评分

参与人数 1黑马币 +1 收起 理由
sinxy + 1 很给力!

查看全部评分

回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马