상세 컨텐츠

본문 제목

[JAVA]Collection(컬렉션)의 자료구조 정리 _Part03.HashMap

Language/JAVA

by Computer_x86_64 2021. 8. 12. 11:21

본문

Collection(컬렉션) 자료구조 정리 Part03.HashMap

 

이번엔 HashMap을 설명하려고 합니다.

 

해당 자료는 도식화해 해당 자료구조가 어떤 구조로 이루어졌는지 정리한 내용입니다.

 

 

Map은 사물함을 생각하면 쉽게 이해할 수 있습니다.

 

예를 들어 전체 사물함 100개에서 1번 사물함의 Key는 1번 사물함의 유일한 Key 여야 합니다.

만약 2번, 3번, ... , 99, 100번 key가 동일하다면 사물함에 물건을 넣어둘 수 없을 겁니다.

 

위 예제를 보면 key는 학번이라는 고유키를 갖고 데이터를 찾아옵니다.

 

위에 예제를 보면 이름<Value> 데이터에 홍길동이라는 중복 데이터가 있습니다.

 

현실 학교에도 동기생 중 이름이 같은 학생이 있을 수 있습니다. (저는 한번 도 경험하지 못했지만요...)

 

Map에서 HashMap을 정리하겠습니다.

 

Hashtable도 있지만 HashMap은 구조자체는 동일하며 HashMap이 최신이며

 

멀티스레드를 사용하지 않는다면 HashMap사용하는게 더 성능에 좋습니다.

 

ArrayList와 Vector와 같이 동기화를 지원하느냐 안하느냐의 차이 입니다.

 

다시 본론으로와서 어찌됐든 구조는 같습니다.

음....막 구조가 엄청 복잡한것같같지만 ArrayList, LinkedList는 앞서 공부한 내용입니다.

ArrayList : https://hwang890.tistory.com/entry/JAVACollection컬렉션의-자료구조-정리-Part01ArrayList 

 

LinkedList : https://hwang890.tistory.com/entry/JAVACollection컬렉션의-자료구조-정리-Part02LinkedList

 

 

[JAVA]Collection(컬렉션)의 자료구조 정리 _Part02.LinkedList

Collection(컬렉션)의 자료구조 정리 이번엔 List의 LinkedList를 설명하려고 합니다. 해당 자료는 도식화해 해당 자료구조가 어떤 구조로 이루어졌는지 정리한 내용입니다. Array(배열)는 생성시 사이즈

hwang890.tistory.com

HashMap은 데이터 추가 시 put() 

1. Key값을 대상으로 해싱함수를 통해 해시값(Hash Value)를 얻습니다.

2. 해시값은 기준으로 인덱스를 계산합니다.

3. 계산된 배열 인덱스에 요소가 
        if (없는 경우) : 첫번쨰 연결된 목록 노드에 값을 추가합니다.
        else (있는 경우) : 특정인덱스의 마지막 링크된 목록노드로 이용하여 값을 추가합니다.

 

HashMap은 데이터 호출 시 get()

1. get(Key k)에 키값을 인수로 지정해 해쉬함수를 통해 해쉬값을 얻습니다.

2. 해시값을 기준으로 인덱스를 계산합니다.

3. 계산되 배열 인덱스에 요소가 
        if (하나만 있는 경우) : 바로 값을 반환합니다.
        else (하나 이상 있는 경우) : 먼저 해쉬값을 비교하고 동일한 경우 동일 메서드를 사용하여 키를 비교합니다. 

 

위에서 보면 해시값을 비교하는데 

해시값은 앞에 설명대로면 유일해야하는데 동일한경우?

 

해시값은 중복되는 경우도 있으며 해당 값이 동일할 경우 동일 메서드를 사용하여 키를 비교합니다.

 

 

관련글 더보기

댓글 영역