사용예시
// java입니당
HashMap<Integer, String> hm = new HashMap<>();
hm.put(1,"hi"); // hm.put(key,value);
여기서 Key는 1, Value는 hi가 된다.
그럼 어떻게 저장되길래 효율적인걸까?🧐
해시에는 해시함수란 기능이 있는데,
해시함수는 key를 넣으면, 미리 약속해둔 길이로 변환시켜주는 기능을 한다.
John Smith
를 넣으면 ->02
로 변환시켜준다
key
를 넣으면 ->hash Value
로 변환시켜준다
key
: 매핑전 값
hash Value
: 매핑후 값
hashing
:->
, 매핑하는 과정
그럼, 위 이미지처럼 만드려면, Key 값을 아래와 똑같이 넣어주면 된다.
HashMap<String, Integer> hm = new HashMap<>();
hm.put("John Smith",01011112222);
hm.put("Lisa Smith",01022223333);
hm.put("Sam Doe",01033334444);
hm.put("Sandra Dee",01044445555);
그럼, 뒤의 저 전화번호는 어디 저장되는걸까? 바로바로!
근데, 위 이미지에서 John Smith와 Sandra Dee가 똑같이 02 라는 키로 변경되는 걸 볼 수 있다.
이럼 충돌이 일어나는 거 아닌가!?
내자리에 누가 있네!? 뒤에 연결해서 넣지 뭐 ㅎㅎ
내자리에 누가 있네!? 다음 칸에 저장하지 뭐 ㅎㅎ
장점 : 충돌없다는 전제 하에 O(1)의 시간복잡도
단점 : 충돌이 발생할 경우, 추가 연산 필요. 정렬 못함.
HashMap
HashTable