HashSet存储自定义类型元素
- set集合保证元素唯一
- 存储的元素(String,Integer,…Student,Person…),必须重写hashCode方法和equals方法
- 要求:
同名同年龄的人,视为同一个人,只存储一次
package com.Set;
import java.util.HashSet;
/*
HashSet存储自定义类型元素
set集合保证元素唯一
存储的元素(String,Integer,...Student,Person...),必须重写hashCode方法和equals方法
要求:
同名同年龄的人,视为同一个人,只存储一次
*/
public class Demo03HashSetSavePerson {
public static void main(String[] args) {
//创建HashSet集合存储Person
HashSet<Person> set = new HashSet<>();
Person p1 = new Person("小美女",20);
Person p2 = new Person("小美女",20);
Person p3 = new Person("小美女",18);
System.out.println(p1.hashCode()); //356573597 | 重写后734175841
System.out.println(p2.hashCode()); //1735600054 | 重写后734175841
System.out.println(p1==p2); //false | false
System.out.println(p1.equals(p2)); //false | true
set.add(p1);
set.add(p2);
set.add(p3);
System.out.println(set); // 重写后--->[Person{name='小美女', age=20}, Person{name='小美女', age=18}]
}
}
Person类
package com.Set;
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;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, 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;
}
}
本文详细介绍了如何在Java中使用HashSet存储自定义类型的元素,如Person对象,并确保集合元素的唯一性。通过重写equals和hashCode方法,实现了对同名同年龄的人视为同一人的需求。
290

被折叠的 条评论
为什么被折叠?



