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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

import java.util.*;
/*
往hashSet集合中存入自定对象
姓名和年龄相同为同一个人,重复元素。

*/
class HashSetTest
{
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
        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));
                Iterator it = hs.iterator();

                while(it.hasNext())
                {
                        Person p = (Person)it.next();
                        sop(p.getName()+"::"+p.getAge());
                }
        }
}
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*37;
        }

        public boolean equals(Object obj)
        {

                if(!(obj instanceof Person))
                        return false;

                Person p = (Person)obj;
                System.out.println(this.name+"...equals.."+p.name);

                return this.name.equals(p.name) && this.age == p.age;
        }

        
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
}


关于这个覆盖的是元素类PERSON的equals方法的  我吧他跟原hashset的equals方法搞混了  哎

总结如下 当hashset调用add方法是先调用底层hashmap的put方法 而put方法呢则要循环比较集合内的各个元素与要加进去的元素进行比较 这里就判断元素的hashcode方法和equals方法

如果hashcode方法返回false直接将元素扔进集合 如果是true则还要判断equals如果相同则当做重复元素不扔进去 否则也扔进集合!

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马