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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

//实现了Compareble的学生类,并重写了compareTo方法。
public class Student implements Comparable<Student> {
        private String name;
        private int    age;
       
        public Student(String name, int age) {
                this.name = name;
                this.age = age;
        }
       
        public int hashCode(){
                return this.name.hashCode()+this.age*34;
        }
       
        //如果哈希地址相同判断对象的内存地址是否相同..
        public boolean equals(Object obj){
                if(!(obj instanceof Student)){
                        throw new ClassCastException("类型不匹配");
                }
                Student student = (Student) obj;
                return (this.name.equals(student.name)) && (this.age==(student.age));
        }
       
        public String toString(Student student){
                return this.name+"==="+this.age;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public int getAge() {
                return age;
        }
        public void setAge(int age) {
                this.age = age;
        }

        @Override
        public int compareTo(Student student) {
               
                int num = new Integer(this.age).compareTo(student.age);
                if (num == 0){
                        return this.name.compareTo(student.name);
                }
                return num;
        }
}

public class HashSetDemo04 {
        public static void main(String args[]){
                Map<Student,String> map = new HashMap<Student,String>();
                map.put(new Student("win12",12), "shanghai");
                map.put(new Student("win11",11), "shenzhen");
                map.put(new Student("win14",14), "wuhan");
                map.put(new Student("win16",16), "nanchang");
               
                Set<Student> key = map.keySet();
                Iterator<Student> it = key.iterator();
               
                while(it.hasNext()){
                        Student key2 = it.next();
                        System.out.println(key2.toString()+"-===="+map.get(key2));
                }
        }
}
实际打印结果为:
com.heima.collection.Map.Student@6be4c95-====shanghai
com.heima.collection.Map.Student@6be4d21-====nanchang
com.heima.collection.Map.Student@6be4c72-====shenzhen
com.heima.collection.Map.Student@6be4cdb-====wuhan

我想要的打印结果是输出类对象而不是hash字节码!!!

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 李春江 于 2014-10-25 20:42 编辑

你好,你打印的当然是地址了,因为你没有覆盖public String toString()方法;
你写的是带参数的:
public String toString(Student student){
                return this.name+"==="+this.age;
        }
所以没有覆盖父类Object的toString方法;
解决办法:去掉括号里的形参就OK

点评

正解,是我太不注意细节了!  发表于 2014-10-26 13:16

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
楼上正解,你这属于函数重载而不是重写
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马