黑马程序员技术交流社区

标题: 集合问题 [打印本页]

作者: 盛亚昆    时间: 2012-3-26 16:12
标题: 集合问题
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;
        }
       
        }
作者: 盛亚昆    时间: 2012-3-26 16:16
public int hashCode()//根据对象条件建立哈希值。描述事物需要往集合里存事物都要复写
        {
                System.out.println(this.name+"....hashCode");
                return name.hashCode()+age*39;//乘以一个数值返回来一个值随意
这个中不一定非要返回name.hashCode()吧,返回 age.hashCode()行不啊
        

作者: 阿牛    时间: 2012-3-26 16:41
盛亚昆 发表于 2012-3-26 16:16
public int hashCode()//根据对象条件建立哈希值。描述事物需要往集合里存事物都要复写
        {
         ...


因为name是String型的,所以它有hashCode()方法,如果要用age的,得先把age转成Integer,new Integer(age).hashCode(),就ok了。




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