의문점 공부하기/📌 Java

📌 HashMap 구현 원칙은 무엇일까?

아리빠 2023. 6. 26. 10:17

해시 함수 사용:

HashMap은 해시 함수를 사용하여 키(key)를 해시 코드로 변환한다.

해시 코드는 내부 배열에서 저장 위치를 결정하는 데 사용

해시 함수는 키의 분포를 고려하여 고르게 분산된 해시 코드를 생성해야 한다

Java에서는 hashCode() 메서드를 사용하여 객체의 해시 코드를 계산한다


해시 충돌 처리:

해시 함수는 서로 다른 키들이 동일한 해시 코드를 가질 수 있기 때문에 해시 충돌이 발생할 수 있다.

HashMap은 내부적으로 해시 충돌을 처리하기 위해 체이닝(Chaining) 방식을 사용- 체이닝은 동일한 해시 코드를 가진 키들을 연결 리스트로 연결하여 충돌을 해결

충돌이 발생한 버킷의 연결 리스트가 일정 길이 이상이 되면 연결 리스트 대신 트리(이진 검색 트리)로 변환하여 검색 성능을 향상


equals()와 hashCode() 메서드:

HashMap은 객체의 동등성 비교를 위해 equals()와 hashCode() 메서드를 사용

equals() 메서드는 두 객체가 동등한지 비교하고, hashCode() 메서드는 동일한 객체인지 확인하기 위해 사용 => HashMap에서 키(key)로 사용되는 객체는 equals()와 hashCode() 메서드를 적절하게 오버라이딩해야 한다.

동일한 키 객체는 항상 동일한 해시 코드를 반환해야 하며, equals() 메서드로 동등성을 비교할 때도 일관된 결과를 반환해야 한다


동기화:

HashMap은 동기화되지 않아서 스레드 안전 X