객체 중복 판정

  • Set 은 동등성, 동일성 고려해서 중복 판단
  • 내용이 같더라도 인스턴스가 다르면 다른 것으로 판정
  • 인스턴스가 다르더라도 내용이 같은 경우 중복으로 처리하려면 별도의 비교 코드 작성
    • hashCode()
    • equals()

hashCode를 먼저 비교하고 이게 같으면 equals 도 따진다.

실제 비교 과정

  1. 먼저 해시코드를 비교
  2. 해시코드가 다르면 → 다른 객체로 판단
  3. 해시코드가 같으면 → equals() 메서드로 실제 내용 비교
// HashMap에서의 내부 동작 예시
if (hash1 != hash2) {
    return false; // 해시코드 다르면 바로 false
} else {
    return obj1.equals(obj2); // 해시코드 같으면 equals()로 실제 비교
}

따라서 해시코드가 같은 경우에만 equals() 메서드가 호출되어 실제 객체의 내용을 비교하게 됩니다. 이는 성능 최적화를 위한 설계입니다.