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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 盛亚昆 中级黑马   /  2012-3-26 16:12  /  1414 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.*;
class  HashCodeDemo
{
        public static void main(String[] args)
        {
                HashSet hs=new HashSet();
                hs.add(new Person("a1",11));
                hs.add(new Person("a2",12));
               
                hs.add(new Person("a3",13));
               
                hs.add(new Person("a4",14));

                                Iterator it=hs.iterator();
               
                               
                while (it.hasNext())

                {
                        Person p =(Person)it.next();
                        sop(p.getName()+"+++"+p.getAge());
                }
        }
                public static void sop(Object obj)
                {
                        System.out.println(obj);
                }

}
        class Person
        {
        private String name;
        private int age;
        Person (String name,int age)
        {
                        this.name=name;
                        this.age=age;
       
        }
        public int hashCode()//根据对象条件建立哈希值。描述事物需要往集合里存事物都要复写
        {
                System.out.println(this.name+"....hashCode");
                return name.hashCode()+age*39;//乘以一个数值返回来一个值随意
       
        }
        public boolean equals(Object obj)//覆盖这个方法
        {
                if (!(obj instanceof Person))
                        //return false;//错误返回false这个没有意义,就直接抛异常
                                throw return new ClassCastException("类型不匹配")
                Person p=(Person)obj;
                System.out.println(this.name+".equals..."+p.name);
                return this.name.equals(p.name)&&this.age==p.age;//这里能不能换成this.age.equals(p.age)啊?为什么要用==啊
               
        }
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
       
                return age;
        }
       
        }

2 个回复

倒序浏览
public int hashCode()//根据对象条件建立哈希值。描述事物需要往集合里存事物都要复写
        {
                System.out.println(this.name+"....hashCode");
                return name.hashCode()+age*39;//乘以一个数值返回来一个值随意
这个中不一定非要返回name.hashCode()吧,返回 age.hashCode()行不啊
        
回复 使用道具 举报
盛亚昆 发表于 2012-3-26 16:16
public int hashCode()//根据对象条件建立哈希值。描述事物需要往集合里存事物都要复写
        {
         ...


因为name是String型的,所以它有hashCode()方法,如果要用age的,得先把age转成Integer,new Integer(age).hashCode(),就ok了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马