在HashSet集合中添加三个Person对象,把姓名相同的人当做同一个人,禁止重复添加。要求如下:Person类中定义name和age属性,重写hashCode()方法和equals()方法,针对Person类的name属性进行比较,如果name相同,hashCode()方法的返回值相同,equals()方法返回true。
时间: 2024-02-20 19:01:07 浏览: 73
好的,我来解答你的问题。
首先,我们需要定义Person类,代码如下:
```java
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public int hashCode() {
return name.hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj == null) return false;
if (this == obj) return true;
if (!(obj instanceof Person)) return false;
Person person = (Person) obj;
return name.equals(person.getName());
}
}
```
在Person类中,我们定义了name和age两个属性,同时重写了hashCode()方法和equals()方法。在hashCode()方法中,我们仅仅使用了Person对象的name属性来计算hashCode值,这样就可以满足题目中的要求了。在equals()方法中,我们同样只比较了Person对象的name属性。
接下来,我们需要将三个Person对象添加到HashSet集合中,代码如下:
```java
Set<Person> set = new HashSet<>();
Person person1 = new Person("张三", 18);
Person person2 = new Person("李四", 20);
Person person3 = new Person("张三", 22);
set.add(person1);
set.add(person2);
set.add(person3);
```
在添加元素时,由于我们已经重写了hashCode()方法和equals()方法,并且在比较时只比较了Person对象的name属性,因此只有person1和person3的name属性相同,它们被认为是同一个人,只会添加一个到HashSet集合中,而person2则会被独立添加。
最后,我们可以打印出HashSet集合中的元素个数来验证一下:
```java
System.out.println(set.size()); // 应该输出2
```
希望我的回答能够帮到你!
阅读全文