From 0426ae9c8326b94d02714235f3c30cd3e3cce449 Mon Sep 17 00:00:00 2001 From: xuxin <840198532@qq.com> Date: Sun, 1 Feb 2026 11:57:31 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E9=98=B6day03-HashSet=E5=AD=98?= =?UTF-8?q?=E5=82=A8=E8=87=AA=E5=AE=9A=E4=B9=89=E5=AF=B9=E8=B1=A1=EF=BC=88?= =?UTF-8?q?=E5=BF=85=E5=AE=9A=E9=87=8D=E5=86=99hashCode&equasl=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/inmind/set02/HashSetDemo10.java | 27 +++++++++++++++++++ .../src/com/inmind/set02/Student.java | 13 +++++++-- 2 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 javaSE-day03/src/com/inmind/set02/HashSetDemo10.java diff --git a/javaSE-day03/src/com/inmind/set02/HashSetDemo10.java b/javaSE-day03/src/com/inmind/set02/HashSetDemo10.java new file mode 100644 index 0000000..e8c8d93 --- /dev/null +++ b/javaSE-day03/src/com/inmind/set02/HashSetDemo10.java @@ -0,0 +1,27 @@ +package com.inmind.set02; + +import java.util.HashSet; + +/* + HashSet存储自定义对象 + +注意:我们保存数据时,先判断哈希值,如果不一样直接存,如果哈希值相同,还会判断equals方法。 +总结:使用HashSet要实现自定义对象的去重,必须重写hashcode和equals,原因底层是哈希表 + + */ +public class HashSetDemo10 { + public static void main(String[] args) { + //保存几个自定义学生对象,实现去重的效果 + HashSet students = new HashSet<>(); + Student s1 = new Student("刘备", 20); + Student s2 = new Student("关羽", 19); + Student s3 = new Student("张飞", 18); + Student s4 = new Student("张飞", 18); + + students.add(s1); + students.add(s2); + students.add(s3); + students.add(s4); + System.out.println(students); + } +} diff --git a/javaSE-day03/src/com/inmind/set02/Student.java b/javaSE-day03/src/com/inmind/set02/Student.java index dcb1a2c..309ba5e 100644 --- a/javaSE-day03/src/com/inmind/set02/Student.java +++ b/javaSE-day03/src/com/inmind/set02/Student.java @@ -10,8 +10,8 @@ public class Student { this.name = name; this.age = age; } - - + //如果没有重写equals方法,默认使用==比较地址来判断是否相同 + //已经重写了equals方法,比较属性的内容 @Override public boolean equals(Object o) { if (o == null || getClass() != o.getClass()) return false; @@ -20,10 +20,19 @@ public class Student { return age == student.age && name.equals(student.name); } + //当前学生类的哈希值,跟内容有关,属性相同的学生对象的哈希值必定相同 @Override public int hashCode() { int result = name.hashCode(); result = 31 * result + age; return result; } + + @Override + public String toString() { + return "Student{" + + "name='" + name + '\'' + + ", age=" + age + + '}'; + } }