///////
Search
🍈

hashCode의 의미는 무엇인가요?

Hash Table

HashTable은 <key,value> 형태로 데이터를 저장하는 자료구조
key 값을 기준으로 해시함수를 사용하여 해시값(hashCode)을 알아내고 그 해시값을 인덱스로 변환하여 키 값과 데이터를 버킷 (bucket) 안에 저장한다
하지만 HashTable 크기는 한정적이기 때문에 같은 서로 다른 객체라 하더라도 같은 해시값을 갖게 될 수도 있다. 이것을 해시 충돌(Hash Collision)이라고 한다.
이런 경우 아래와 같이 해당 버킷(Bucket)에 LinkedList 형태로 객체를 추가한다 (LinkedList 아이템의 갯수가 8개 이상으로 넘어가면 TreeMap 자료구조로 저장)
이처럼 같은 해시값의 버킷 안에 다른 객체가 있는 경우 equals 메서드가 사용된다

HashCode()

객체의 hashCode를 반환한다
해시 알고리즘에 의해 생성된 정수 값으로 객체를 식별하는데 사용된다
Object의 hashCode() 메소드는 객체의 메모리 주소를 이용해서 해시코드를 만들어 리턴하기 때문에 객체 마다 다른 값을 가지고 있다
public class Person { private String Name; private Integer Age; }
Java
복사
public static void main(String args[]) { Person person1 = new Person(); Person person2 = new Person(); System.out.println(person1.hashCode()); System.out.println(person2.hashCode()); }
Java
복사
실행 결과:
1118140819 1975012498

hashCode() 재정의

@Override
public
int
hashCode()
{
return
Age; }
@Override public int hashCode() { return Age; }
Java
복사
hashCode() 메서드를 재정의했다고 객체의 내부 주소가 바뀌는 것은 아니다
hashCode()를 재정의 하면 equals()도 재정의 해야하고 반대의 경우도 같다