Java问题 定义比较 返回值

6.在HashSet集合中添加三个Person对象,把姓名相同的人当做同一个人,禁止重复添加。要求如下:

Person类中定义name和age属性,重写hash()和equals()方法,针对Person类的name属性进行比较,如果name相同,hashcode()方法的返回值也相同,equals1方法返回true。

 

//Person类
public class Person {
    private String name;
    private int age;

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    @Override
    public int hashCode() {
        return name.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if(!(obj instanceof Person)) {
            return false;
        }
        Person person = (Person)obj;
        if(name == null) {
            return person.getName() == null? true : false;
        }
        return name.equals(person.getName());
    }

    @Override
    public String toString(){
        return "name:" + name + ", age:" + age;
    }
}

//测试
public class Test {
    public static void main(String[] args) {
        HashSet set = new HashSet<Person>();
        Person p1 = new Person("张三",18);
        Person p2 = new Person("张三",20);

        set.add(p1);
        set.forEach(p -> System.out.println(p.toString()));
        System.out.println(set.size());

        set.add(p2);
        set.forEach(p -> System.out.println(p.toString()));
        System.out.println(set.size());

        System.out.println(p1.equals(p2));
    }
}

运行结果:

name:张三, age:18
1
name:张三, age:18
1
true