이상한 HashSet과 HashMap

쌍문동두루미·2024년 7월 30일

문제와 해결책

목록 보기
3/6
	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 "같은 객체";
}

아마 자바 내부에서는 이런 식으로 정의되어 있을 것이다.

참고자료 : https://ksabs.tistory.com/188

profile
나는 컴퓨터를 좋아함

0개의 댓글