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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class Person {
        private String name;
        private int age;
        public Person() {
                super();               
        }
        public Person(String name, int age) {
                super();
                this.name = name;
                this.age = 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 String toString() {
                return "Person [name=" + name + ", age=" + age + "]";
        }
        @Override
        public boolean equals(Object obj) {
                System.out.println("执行了吗");
                Person p = (Person)obj;
                return this.name.equals(p.name) && this.age == p.age;
        }
        @Override
        public int hashCode() {
                return 10;
        }       
}
测试类:
package com.heiam.mytest;
import java.util.HashSet;
import com.heiam.bean.Person;
public class Demo1_HashSet {
        /**
         * 注意:我们认为姓名和年龄都相同时表示时同一个人
         * 如果:Person类中没有重写equals方法的话,无法去重,但是重写后还是无法去除重复的内容
         * 因为HashSet判断元素是否重复,首先根据元素的hashCode值,而我们并没有重写Person类的hashCode方法,
         * 此时调用的是Object中的hashCode方法,而此方法是根据对象的地址值计算hashCode值,而只要是new出来的对象,
         * 地址值肯定不同,所以计算出来的hashCode值也不相同,就认为不是同一个对象,也不会执行equals方法
         * 如果我们重写了hashCode方法,先简单的返回一个数字10,这样当判断hashCode相等时就会去判断equals方法的返回值,
         * 就能够去除重复
         * @param args
         */
        public static void main(String[] args) {
                HashSet<Person> hs = new HashSet<>();
                hs.add(new Person("张三", 23));
                hs.add(new Person("张三", 23));
                hs.add(new Person("李四", 24));
                hs.add(new Person("李四", 24));
                hs.add(new Person("李四", 24));
                hs.add(new Person("李四", 24));
               
                //System.out.println(hs.size());
                System.out.println(hs);
        }
}

0 个回复

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