티스토리 뷰

HashCode
HashCode는 객체의 고유한 정수 값을 나타내는 메서드입니다.
이 값은 객체를 식별하는 데 사용되며, 특히 해시 테이블과 같은 자료 구조에서 중요한 역할을 합니다.
why
빠른 검색: HashCode를 사용하면 해시 테이블에서 객체를 빠르게 찾을 수 있습니다. 해시 테이블은 HashCode 값을 사용하여 객체를 저장하고 검색합니다.
중복 확인: HashCode를 사용하면 두 객체가 같은지 빠르게 확인할 수 있습니다. 두 객체의 HashCode 값이 같다면, 두 객체가 같을 가능성이 높습니다.
데이터 구조 활용: HashCode는 Set, HashMap, Hashtable 등의 자료 구조에서 객체를 식별하는 데 사용됩니다.
public class Person {
// 이 클래스는 사람 객체를 나타냅니다.
private String name; // 사람의 이름을 저장하는 필드
private int age; // 사람의 나이를 저장하는 필드
// 생성자. 이름과 나이를 초기화합니다.
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// hashCode() 메서드는 객체의 고유한 정수 값을 반환합니다.
// 이 값은 해시 테이블에서 객체를 식별하는 데 사용됩니다.
@Override
public int hashCode() {
// 초기값 17을 사용하여 해시 코드를 계산합니다.
int result = 17;
// name 필드의 해시 코드와 age 필드를 사용하여 해시 코드를 계산합니다.
// 31은 소수이므로 좋은 승수 값입니다.
result = 31 * result + name.hashCode();
result = 31 * result + age;
// 계산된 해시 코드를 반환합니다.
return result;
}
// equals() 메서드는 두 객체가 같은지 비교합니다.
// 두 객체의 name과 age 필드가 같으면 true를 반환합니다.
@Override
public boolean equals(Object obj) {
// 자기 자신과 비교하는 경우 true를 반환합니다.
if (this == obj)
return true;
// 비교 대상이 null이거나 클래스가 다른 경우 false를 반환합니다.
if (obj == null || getClass() != obj.getClass())
return false;
// 비교 대상을 Person 타입으로 캐스팅합니다.
Person other = (Person) obj;
// name과 age 필드가 같은지 비교하여 결과를 반환합니다.
return Objects.equals(name, other.name) && age == other.age;
}
}
Person 클래스를 정의하고, hashCode() 메서드와 equals() 메서드를 오버라이드하여 구현하고 있습니다.
hashCode() 메서드는 객체의 고유한 정수 값을 반환하며, 이 값은 해시 테이블에서 객체를 식별하는 데 사용됩니다.
이 메서드는 name 필드의 해시 코드와 age 필드를 조합하여 해시 코드를 계산합니다.
equals() 메서드는 두 Person 객체가 같은지 비교합니다.
이 메서드는 먼저 자기 자신과 비교하는 경우 true를 반환하고, 비교 대상이 null이거나 클래스가 다른 경우 false를 반환합니다.
그 후에는 name과 age 필드가 같은지 비교하여 결과를 반환합니다.
이러한 hashCode() 메서드와 equals() 메서드는 해시 테이블과 같은 자료 구조에서 객체를 효율적으로 관리하고 비교하는 데 사용됩니다.
'궁금한 것' 카테고리의 다른 글
Connection pool (0) | 2024.02.02 |
---|---|
DML/DDL/DCL (0) | 2024.02.02 |
Null point Exception이란 (0) | 2024.01.31 |
interface 사용이유 (0) | 2024.01.31 |
IO 출력스트림 Token 단위 (0) | 2024.01.30 |