해시가 뭐야? 🧐
해시(Hash)는
키 값을해시 함수(Hash function)
으로 해싱하여 해시테이블의 특정 위치로 직접 엑세스하도록 만든 방식이다.
해시테이블이 뭐야? 🧐
해시 테이블은 연관배열 구조를 이용하여 키(key)에 결과 값(value)을 저장하는 자료구조이다.
연관배열 구조(associative array)란, 키(key) 1개와 값(value) 1개가 1:1로 연관되어 있는 자료구조이다. 따라서 키(key)를 이용하여 값(value)을 도출할 수 있다.
key 와 value는 일대일 매핑으로 같은 value값을 가질 순 있어도, 같은 key값은 가지지 못한다.
1. 해시테이블(HashTable) 클래스
Non-generic
클래스.key
와value
를 가지고 있음 -> 둘다object
타입으로 받음 -> boxing/unboxing이 일어난다.Double Hashing
방식을 사용
💚 Double Hashing
이란?
해시충돌이 일어날 경우 한 번 더 다른 해시함수를 거쳐 새로운 해시코드를 생성하여 해시충돌을 막는 방법.
💚 해시충돌
이란?
서로 다른 키값을 가졌지만 해싱 후 가진 해시코드가 같은 경우.
ex) 만약 해시함수의 알고리즘이 문자열의 길이를 반환한다고 가정하였을 경우, cake와 taco는 4라는 해시코드를 가지게 된다. key는 서로 다르지만 해시코드가 이처럼 같은 경우를 해시충돌이라고 한다.
2. 딕셔너리(Dictionary) 클래스
Generic
클래스.key
와value
를 가지고 있음 -> Generic으로 타입을 지정 ->boxing/unboxing 일어나지 않음!
Chaining
방식을 사용
💚 Chaining
이란?
linked list로 해당값을 기존값에 연결시키는 방법이다.