public static void main(String[] args) {
Korean k1 = new Korean("240730-1234567", "홍길동");
Korean k2 = new Korean("240730-1234567", "홍길동");
HashSet<Korean> people = new HashSet<Korean>();
people.add(k1);
people.add(k2);
System.out.println(people);
}
@Override
public boolean equals(Object o) {
Korean k = (Korean) o;
if (this.id.equals(k.id)) {
return true;
} else {
return false;
}
}
public int hashCode() {
return this.id.hashCode();
}
Hashset은 equals() 메서드를 통해 그 객체가 똑같은 객체인지 아닌지 판단한다고 한다.
따라서 equals() 메서드를 재정의해서 같은 객체인지 판단할 수 있게 하는 건 이해가 된다.
그렇다면 왜 또 hashCode도 같게 나오게 재정의해야 하는가?
HashSet이_중복된_객체를_판단하는_메서드 (Object o1, Object o2) {
if (!o1.equals(o2)) {
return "다른 객체";
}
if (o1.hashCode() == o2.hashCode()) {
return "다른 객체";
}
return "같은 객체";
}
아마 자바 내부에서는 이런 식으로 정의되어 있을 것이다.