附上代码 :
import java.util.HashSet;
public class HashSetTest {
public static void main(String [] args){
HashSet<Person> people = new HashSet<>();
Person p1 = new Person("aaa","男",18);
Person p2 = new Person("bbb","女",18);
Person p3 = new Person("ccc","男",19);
Person p4 = new Person("aaa","女",19);
people.add(p1); people.add(p2);
people.add(p3); people.add(p4);
for (Person p : people){
System.out.print(p);
}
//System.out.println(people);
}
private static class Person{
private String name,sex;
private int age;
Person(String name,String sex,int age){
this.name = name;
this.sex = sex;
this.age = age;
}
@Override
public String toString() {
return "\n[ "+name+" , "+sex+" , "+age+" ]\n";
}
@Override
public boolean equals(Object obj) {
/** 为同一个对象时 **/
if (obj == this){
return true;
}
/** 类型相同时 ,进而根据自己的需要进行筛选**/
if (obj instanceof Person){
if (((Person) obj).name.equals(this.name)){
return true;
}
return false;
}
return false;
}
@Override
public int hashCode() {
return this.name.hashCode();
//根据自己的需要生成Hash散列值
}
}
}
这里的同一个对象指的是 对象内存地址相同
同一类型指的是 继承或实现的某个共同父类的对象
Person p1 = new Person(...);
Person p2 = new Person(...);
Person p3 = p1;
p3 指向 p1的内存块地址 所以他们是同一个对象
p1 p2 都是Person对象 有各自的内存地址 所以 p1 p2 为同一类型但是不是同一个对象
都是个人的一些理解 慢慢学习