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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑夜里的白猫 中级黑马   /  2013-10-14 11:42  /  1095 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


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

                hm.put(new Student("lisi1",11),"beijing");
                hm.put(new Student("lisi2",11),"shangahi");
                hm.put(new Student("lisi3",11),"nanjing");
                hm.put(new Student("lisi4",11),"wuhan");

                //第一种 keySet
       

                Set<Student> keyset = hm.keySet();

                Iterator<Student> it = keyset.iterator();

                while (it.hasNext())
                {
                        Student s = it.next();

                        String add = hm.get(s);

                        System.out.println("key:"+s+",value:"+add);//key:lisi3,value:nanjing//key值返回的为什么是名字,不应该是一个对象的地址值么?
                }
        }
}

class Student  implements Comparable<Student>{        private String name;        private int age;        Student(String name, int age)        {                this.name = name;                this.age = 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 int hashCode()        {                return name.hashCode()+age*7;        }
        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 String getName()        {                return name;        }
        public int getAge()        {                return age;        }
        public String toString()        {                return name+":"+age;        }}


评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

4 个回复

倒序浏览
哥们,建议你要下次要把代码插入进来而不是粘贴进来,看得我眼睛都晕了。
"key值返回的为什么是名字,不应该是一个对象的地址值么?"因为你的s得到的是Student对象,而System.out.println(s)你直接去打印这个对象的话实质上是调用了这个Student类的toString()方法,你看看你的Student类的toString方法
  1.         public String toString() {
  2.                 return name + ":" + age;
  3.         }
复制代码
是不是返回的是 名字 + 年龄 的形式。
所以你的打印结果应该是
key:lisi3:11,value:nanjing
key:lisi2:11,value:shangahi
key:lisi4:11,value:wuhan
key:lisi1:11,value:beijing
没错吧~

评分

参与人数 1技术分 +1 收起 理由
周志龙 + 1

查看全部评分

回复 使用道具 举报
To 金牌黑马 2013-10-14 19:29:09
藤椅
楼主你好,如果问题已解决请将帖子状态修改为提问结束,如果未解决请继续提问,谢谢合作
如果不会修改请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
bird_not_fat 发表于 2013-10-14 13:33
哥们,建议你要下次要把代码插入进来而不是粘贴进来,看得我眼睛都晕了。
"key值返回的为什么是名字,不应 ...

抱歉抱歉.开始还不知道toString () 在这的用处呢,你这么一说明白了!  谢谢!
回复 使用道具 举报
public String toString()返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂。建议所有子类都重写此方法。
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希代码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:

getClass().getName() + '@' + Integer.toHexString(hashCode())

在这里重写了toString(),所以出现上述结果;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马