• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    해결됨

해시테이블 질문있습니다.

23.03.16 14:09 작성 23.03.16 14:10 수정 조회수 336

2

강의 잘 들었습니다. 비전공자임에도 이해하기 정말 편하였습니다. 해시함수를 통해 충돌을 방지하여 데이터를 각 인덱스 번째에 오는 연결리스트에 부여하는 것 까지 보고 구현까지 해보았는데 궁금한게 생겨서 질문합니다.

만약 key값이 해시함수를 걸쳐 같은 인덱스로 부여되는 상황이 아닌, 완전히 key값이 동일한 상황에 오면 해당 해시테이블의 구현으로는 리스트의 헤드에 삽입하여 삽입에는 문제가 없는데 찾을때 키값이 같아버리면 먼저 넣은 데이터는 찾지 못하는 건가요?

이런 현상의 해결방법도 있는지 궁금합니다.

답변 1

답변을 작성해보세요.

2

안녕하세요 rndjdieo119님!
질문해주신 내용은 set()함수의 문제점입니다.

말씀하신 것처럼 완전히 동일한 key를 set 함수로 해시테이블에 삽입했다면 먼저 삽입된 key는 중복되어 get() 함수로 접근할 수 없습니다.
이런 이유로 해시테이블은 중복없는 고유한 key를 저장해야 합니다.
따라서 완벽한 해시테이블을 만들기 위해서는

set() 함수에서 먼저 해당 key가 존재하는지 체크할 필요가 있습니다.
if문을 넣어서 해당 key가 존재한다면 삽입을 진행하지 않고 존재하지 않는다면 삽입을 진행하시면 됩니다!

set(key, value){
  if(get(key) == null){
    this.arr[this.hashFunction(key)].insertAt(0, new HashData(key, value));
  }
}

너무 좋은 질문이신 것 같습니다!

궁금증이 해결되셨나요? 😊

감사합니다!