6.在HashSet集合中添加三个Person对象,把姓名相同的人当做同一个人,禁止重复添加。要求如下:
Person类中定义name和age属性,重写hash()和equals()方法,针对Person类的name属性进行比较,如果name相同,hashcode()方法的返回值也相同,equals1方法返回true。
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