본문/내용
1. 직접 구현해 본 자료구조를 설명해주세요. [필수]
구현에 사용한 언어와 함께, 구현 과정에서 알게 된 점과 구현 시 중점을 둔 부분이 무엇이었는지 작성해주세요.
※ 언어 또는 라이브러리에서 제공하는 컬렉션을 단순히 사용해본 경험은 제외합니다.
글자수 제한 없음
(제한 없음)
자료구조를 공부하면서 가장 크게 느낀 의문은 “HashMap의 조회가 왜 빠른가”였습니다. 처음에는 키를 넣으면 해시값을 계산해 데이터를 바로 찾는다는 설명을 이해하는 수준이었습니다. 하지만 충돌이 발생하면 어떻게 되는지, 데이터가 계속 증가하면 왜 성능이 달라지는지, Resize가 어느 순간 발생하는지는 라이브러리를 사용하는 것만으로 체감하기 어려웠습니다. 그래서 Java로 해시 테이블을 직접 구현했습니다. 목표는 HashMap과 동일한 수준의 완성품을 만드는 것이 아니라 put, get, remove라는 기본 연산이 내부에서 어떤 과정을 거치는지 코드로 확인하는 것이었습니다.
먼저 고정 크기의 배열을 만들고 각 인덱스를 Bucket으로 사용했습니다. 입력된 Key의 hashCode를 이용해 해시값을 구한 뒤 배열의 크기에 맞게 인덱스를 계산했습니다. 여기까지 …