黑马程序员技术交流社区

标题: 关于集合的疑惑 [打印本页]

作者: null001    时间: 2014-2-15 16:57
标题: 关于集合的疑惑
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
作者: null001    时间: 2014-2-15 16:59
不能沉了啊
作者: 郝大龙0104    时间: 2014-2-15 17:53
System.out.println(stu+".."+add);    我是新手  应该是这句话的问题  你输出的是stu的地址   你应该是这样的System.out.println(stu.getName()+".."+add);   最后的结果是   名字...地址    的形式   
作者: 程澄    时间: 2014-2-15 18:09
因为调用的是Object类的toString()方法,
      返回getClass().getName() + '@' + Integer.toHexString(hashCode())
你可以在Student类中自己定义个toString()方法,覆盖掉Object的就好了

作者: tf996268809    时间: 2014-2-15 21:02
这是因为Student类没有重写toString方法
作者: 徐君    时间: 2014-2-15 21:13
重写toString方法,我刚接触这的时候也犯这样的迷糊。
作者: 徐青松    时间: 2014-2-16 10:28
因为所有java类的父类都是Object,你这里System.out.println(stu+".."+add);意思是想打印出这个学生姓名年龄,调用的是你定义的Student的toString()方法,但是你没有覆盖重写父类Object的toString()方法,所以使用的还是Object类的toString()方法,返回getClass().getName() + '@' + Integer.toHexString(hashCode()),查看Object的toString()方法就知道为啥是这样的格式了。所以你可以在Student类中定义自己的toString()方法,输出你想输出的内容就可以了。
作者: 孤独的天奇    时间: 2014-2-16 14:44
你重写一下student类的toString方法就行了,显示什么你可以在toString里自己定义
作者: 唐志海    时间: 2014-2-17 11:52
System.out.println(stu+".."+add);你map集合的键值时学生对象。。所以你stu是一个学生对象,打印出来的当然是该对象的地址值。如果你想打印该学生的姓名跟年龄可以通过getName()和getAge()来获得,或者复写Student  中的toString()方法。。




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