3、在HashSet集合中添加三个Person对象,把姓名相同的人当做同一个人,禁止重复添加。要求如下: 1) Person类中定义name和age属性,重写hashCode()方法和equals()方法,针对Person类的name属性进行比较,如果name相同,hashCode()方法的返回值相同,equals()方法返回true。
时间: 2024-02-18 16:01:25 浏览: 68
好的,这是一个关于Java中HashSet集合的问题,需要用到自定义对象和hashCode()方法、equals()方法。下面是代码实现的步骤:
A. 首先创建一个名为Person的类,该类有两个属性,分别是name和age。并重写hashCode()方法和equals()方法,针对Person类的name属性进行比较,如果name相同,hashCode()方法的返回值相同,equals()方法返回true。
```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 Objects.hash(name);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return Objects.equals(name, person.name);
}
}
```
B. 创建一个HashSet集合对象,并添加多个Person对象,包括姓名相同的人。
```java
Set<Person> persons = new HashSet<>();
Person person1 = new Person("Tom", 18);
Person person2 = new Person("Jerry", 20);
Person person3 = new Person("Lucy", 19);
Person person4 = new Person("Tom", 22);
persons.add(person1);
persons.add(person2);
persons.add(person3);
persons.add(person4);
```
C. 遍历集合中的元素,并输出每个Person对象的属性。
```java
for (Person person : persons) {
System.out.println(person.getName() + ", " + person.getAge());
}
```
完整的代码如下:
```java
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Set<Person> persons = new HashSet<>();
Person person1 = new Person("Tom", 18);
Person person2 = new Person("Jerry", 20);
Person person3 = new Person("Lucy", 19);
Person person4 = new Person("Tom", 22);
persons.add(person1);
persons.add(person2);
persons.add(person3);
persons.add(person4);
for (Person person : persons) {
System.out.println(person.getName() + ", " + person.getAge());
}
}
}
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 Objects.hash(name);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Person person = (Person) obj;
return Objects.equals(name, person.name);
}
}
```
输出结果如下:
```
Jerry, 20
Lucy, 19
Tom, 18
```
可以看到,添加了两个姓名为"Tom"的Person对象,但最终只有一个"Tom"被添加到了集合中,符合题目要求。
阅读全文