s-day02-HashSet存储自定义对象

This commit is contained in:
2026-08-02 11:53:48 +08:00
parent 648800a600
commit 9f74cb1cae
3 changed files with 38 additions and 4 deletions
@@ -0,0 +1,26 @@
package com.inmind.set02;
import java.util.HashSet;
/*
总结:哈希表通过对象的hashCode和equals方法来实现去重功能的,它能够在实现去重的基础上,还能保证高效查询操作
如何保证高效,假设有1万条数据,遍历是否包含某个数据,由hashCode值,就排除了8000条数据,只要查询2000条
HashSet存储自定义对象
注意:我们保存数据时,先判断哈希值,如果不一样直接存,如果哈希值相同,还会判断equals方法。
总结:使用HashSet要实现自定义对象的去重,必须重写hashcode和equals,原因底层是哈希表
*/
public class HashSetTest10 {
public static void main(String[] args) {
//创建HashSet集合,保存学生对象
HashSet<Student> students = new HashSet<>();
//去重功能,需要将同名同年龄的学生看作是同一个学生
students.add(new Student("张三", 18));
students.add(new Student("张三", 18));
students.add(new Student("张三3", 18));
students.add(new Student("张三4", 18));
System.out.println(students.size());
System.out.println(students);
}
}
@@ -17,10 +17,10 @@ public class HashTableDemo09 {
String str3 = "通话";
String str4 = "重地";
//查看他们各自的哈希值
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
System.out.println(str3.hashCode());
System.out.println(str4.hashCode());
System.out.println(str1.hashCode());//96354
System.out.println(str2.hashCode());//96354
System.out.println(str3.hashCode());//1179395
System.out.println(str4.hashCode());//1179395
//存入set集合
HashSet<String> sets = new HashSet<>();
@@ -26,4 +26,12 @@ public class Student extends Object {
result = 31 * result + age;
return result;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}