import java.util.Objects; public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { 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 + '}'; } //hashCode和equals进行name的比较就好了 @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Person)) return false; Person person = (Person) o; return person.name.equals(this.name); } @Override public int hashCode() { return Objects.hash(getName()); } }
时间: 2024-02-14 22:21:07 浏览: 21
这是一个 Java 类,名为 Person,有两个属性,分别为 name 和 age,以及它们各自的 getter 和 setter 方法。此外还有一个默认构造方法和一个带有两个参数的构造方法。
在该类中,还重写了 toString()、equals() 和 hashCode() 方法,其中 equals() 方法进行了 name 的比较,hashCode() 方法根据 name 生成了哈希值。这些方法的重写是为了方便在集合中使用该类的实例。
相关问题
1) 设计一个Person类,在该类中定义两个变量name和age 2) 在Person类中重写hashCode()和equals()方法 3) 编写类Example10,在该类中定义一个HashSet集合 4) 将Person对象存入HashSet集合中,其中含有重复的Person对象 5) 遍历HashSet集合中的元素,观察结果是否含有重复的对象
好的,以下是代码实现:
```
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class Example10 {
public static void main(String[] args) {
Set<Person> set = new HashSet<>();
Person person1 = new Person("张三", 20);
Person person2 = new Person("李四", 30);
Person person3 = new Person("张三", 20);
set.add(person1);
set.add(person2);
set.add(person3);
for (Person person : set) {
System.out.println(person);
}
}
}
```
解释一下代码的实现过程:
1. 首先定义了一个 `Person` 类,该类中有两个属性 `name` 和 `age`;
2. 重写了 `hashCode()` 和 `equals()` 方法,用于判断两个 `Person` 对象是否相等;
3. 在 `Example10` 类中定义了一个 `HashSet` 集合;
4. 创建了三个 `Person` 对象,其中前两个是不同的对象,第三个对象与第一个对象属性相同;
5. 将这三个 `Person` 对象存入 `HashSet` 集合中;
6. 遍历 `HashSet` 集合中的元素,并输出每个元素的信息,观察结果是否含有重复的对象。
希望能帮到你!
3、在HashSet集合中添加三个Person对象,把姓名相同的人当做同一个人,禁止重复添加。要求如下: 1) Person类中定义name和age属性,重写hashCode()方法和equals()方法,针对Person类的name属性进行比较,如果name相同,hashCode()方法的返回值相同,equals()方法返回true。
好的,这是一个关于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"被添加到了集合中,符合题目要求。