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 + + '}'; + } }