매일 매일 미라클 코딩

[자료구조] 해쉬(Hash)구조 - Set 과 Map 본문

BackEnd/JAVA

[자료구조] 해쉬(Hash)구조 - Set 과 Map

뚜벅-뚜벅 2021. 3. 26. 15:02

해쉬구조: key->value . '검색'에 특화된 제일 빠른 구조. 정렬은 하지 않는다.
모든것, 아무리 긴 것도 다 64bit 로 변환하는 해쉬 알고리즘을 사용한다.

대신 저장하는데 오래걸리고 워낙 큰값도 64bit로 변환하다보니 동일한 해쉬값나올수 있다(충돌).

Map: (Key, Value)

Key를 Hash화하여 정렬 후 value를 저장

키에 해당하는 값을 찾는 구조로 검색속도가 빠르다.

key값은 중복이 없지만 다른 key에 같은 value가 존재 가능하다

ex) 위도 경도 입력해 독도 찾기

Set: 집합

Value를 Hash화 하여 정렬 후 저장
- value를 찾아내는 구조
- 값의 중복을 허용하지 않는다

HashSet, TreeSet : Data의 중복을 허용하지 않음
HashMap, TreeMap : Key 값의 중복을 허용하지 않음
HashTable : HashMap 과 동일하지만 Thread-Safe 한 자료형


동일한 데이터의 기준은?
1단계) Object 로부터 상속받은 hashCode()의 값을 비교하여 판단
2단계) Object 로부터 상속받은 equals() 메소드의 반환값으로 판단
ㄴ> HashSet/HashMap은 2단계가 같으면 같은 데이터로 판단.

(드물지만 충돌가능성 有) => 그래서 Overriding으로 재정의해서 판단

 

*iterator > 자료구조에 접근하는 반복자
배열리스트에도 이터레이터 접근 가능. 데이터 전체를 가져와야할 때 코드를 줄일 수 있다. 
내부적 구조가 다름에도, 접근방식을 같게 하여 데이터 출력을 용이하게 함
=> 자료구조 바꿀 일이 생겨도 출력 코드를 바꾸지 않아도 된다는 장점이있다.
 대신 자료구조 저장 특성은 반영한다. ex) Hash -> Tree 중복 제거되고 순서도 바뀌어 출력 되는거 볼 수 있음.