[ 목차 ]
해시테이블
- 해시테이블(Hash Table)은 키(Key)-값(Value) 쌍을 저장하는 자료구조로, 해시 함수(Hash Function)을 사용하여 특정 위치(Buckets)에 매핑한다.
- 해시(Hash): 데이터를 고정된 길이의 값으로 매핑한 결과.
- 해싱(Hashing): 데이터를 해시 값으로 변환하는 과정.
- 해시 함수(Hash Function): 데이터를 해시 값으로 변환하는 함수.
해시테이블의 특징
- 빠른 접근: 해시 함수로 인해 키를 기반으로 값을 빠르게 조회 가능.
- 중복 키 없음: 동일한 키를 허용하지 않음.
- 충돌 해결 필요: 다른 키가 동일한 해시값을 갖는 경우(충돌) 처리 방법 필요
충돌해결 방법
- 체이닝(Chaining): 같은 해시값을 가지는 키들을 연결 리스트로 저장.
- 개방 주소법(Open Addressing): 충돌 시 다른 빈 버킷을 찾아 저장.
해시테이블의 장단점
- 장점:
- 검색, 삽입, 삭제가 평균적으로 O(1).
- 대규모 데이터 처리에 적합.
- 단점:
- 해시 함수의 품질에 따라 성능 저하 가능.
- 메모리 사용량이 많아질 수 있음.
해시테이블 시간 복잡도
- 검색/삽입/삭제:
- 평균적으로 O(1).
- 최악의 경우 O(n) (모든 키가 동일한 해시값을 가질 경우).
자바에서의 해시테이블
- 자바의 Hashtable 클래스는 키-값 쌍을 저장하며, 동기화(synchronized)가 기본적으로 적용된 구현체이다.
- HashMap과 달리 멀티스레드 환경에서 안전하게 사용할 수 있지만, 단일 스레드 환경에서는 성능이 떨어질 수 있다.
- null 키나 값을 허용하지 않는다.
해시테이블 주요 메서드
사용예시 :
맵(Map)
- 맵(Map)은 키(Key)-값(Value) 쌍으로 데이터를 저장하는 인터페이스이다.
- 삽입 시 자동으로 정렬되며, 이는 Red-Black Tree를 사용해 구현한다.
- 자바의 대표적인 맵 구현체는 HashMap, TreeMap, LinkedHashMap이 있다.
맵의 특징
- 빠른 데이터 접근: 키를 사용해 값에 빠르게 접근 가능.
- 키의 중복 불허용: 각 키는 고유해야 하며, 동일 키 추가 시 기존 값을 대체.
- 가변적 크기: 동적으로 크기가 조정됨.
- 유연한 구현체 선택: 정렬, 삽입 순서 유지 등 다양한 요구사항에 맞는 구현체 제공.
주요 맵 구현체
- HashMap :
- 해시테이블 기반 구현체
- 순서가 보장되지 않음
- 빠른 검색과 삽입/삭제 제공
- TreeMap :
- 이진 탐색 트리를 기반으로 정렬된 키 순서 유지
- 키 검색, 삽입, 삭제가 O(log n)
- LinkedHashMap :
- 삽입 순서를 유지
- 해시테이블과 연결리스트를 결합한 구조
맵의 장단점
- 장점:
- 키를 통해 빠르게 데이터 접근 가능.
- 다양한 구현체를 통해 특정 요구사항에 맞게 선택 가능.
- 동적으로 크기 조정 가능.
- 단점:
- 메모리 사용량이 증가할 수 있음.
- 해시 충돌 시 성능 저하 가능.
- 정렬이 필요한 경우 구현체에 따라 추가 비용 발생.
맵의 시간 복잡도
- 검색/삽입/삭제:
- HashMap: O(1) (평균), O(n) (최악 충돌 발생 시).
- TreeMap: O(log n).
- LinkedHashMap: O(1) (평균, HashMap과 동일 성능).
맵의 주요 메서드
셋(Set)
- 셋(Set)은 중복을 허용하지 않는 데이터 컬렉션으로, 고유한 요소만을 저장한다.
- 맵과 유사하게 자동 정렬되며, 메서드도 맵과 유사하다.
- 자바의 대표적인 셋 구현체는 HashSet, TreeSet, LinkedHashSet이다.
셋의 특징
- 중복 허용 불가: 동일한 값은 한 번만 저장 가능.
- 빠른 데이터 접근: 해시 기반 구조(HashSet)는 평균 O(1)의 접근 시간 제공.
- 정렬 지원: TreeSet은 자동으로 정렬된 상태 유지.
- 삽입 순서 유지: LinkedHashSet은 요소의 삽입 순서 유지.
주요 셋 구현체
- HashSet :
- 해시테이블을 기반으로 한 구현체.
- 순서가 보장되지 않음.
- 빠른 삽입, 삭제, 검색 제공.
- TreeSet :
- 이진 탐색 트리를 기반으로 정렬된 순서 유지
- 검색, 삽입, 삭제가 O(log n)
- LinkedHashSet :
- 삽입 순서를 유지
- 해시테이블과 연결리스트를 결합한 구조
셋의 장단점
- 장점:
- 중복 제거 기능 제공.
- 다양한 셋 구현체를 통해 특정 요구사항에 맞는 선택 가능.
- 빠른 데이터 탐색(HashSet) 및 정렬(TreeSet) 지원.
- 단점:
- 순서가 중요한 경우 제한적일 수 있음(HashSet).
- TreeSet의 경우 O(log n)으로 성능 저하 가능.
셋의 시간 복잡도
- 검색/삽입/삭제:
- HashSet: O(1) (평균), O(n) (최악 충돌 발생 시).
- TreeSet: O(log n).
- LinkedHashSet: O(1) (HashSet과 동일 성능).
셋의 주요 메서드
해시테이블, 맵, 셋의 비교
특징 | 해시테이블 (Hash Table) | 맵 (Map) | 셋 (Set) |
데이터 구조 | 키-값 저장 | 키-값 저장 | 중복없는 값 저장 |
순서 보장 여부 | 순서보장 X | LinkedHashMap : 삽입 순서 보장 | LinkedHashSet : 삽입 순서 보장 |
정렬 여부 | 없음 | TreeMap : 키 정렬 | TreeSet : 값 정렬 |
중복 허용 여부 | 키 중복 불가, 값 중복 가능 | 키 중복 불가, 값 중복 가능 | 값 중복 불가 |
주요 활통 사례 | 데이터 캐싱, 키-값 매핑 | 데이터 매핑, 정렬된 데이터 저장 | 중복 제거, 집합 연산 |
출처
[자료구조] 맵(Map), 셋(Set), 해시테이블(Hash Table)
✒️ 0. 들어가기 전이 글에서는 주로 키-값 쌍을 저장하거나 고유한 값을 저장하는 데 사용되는 자료구조들에 대해 설명한다.해시테이블의 구현 방식과 맵, 셋의 활용 사례를 포함하여 배워보
jinhos-devlog.tistory.com
[CS] 자료 구조의 분류 - 비선형 자료 구조 #3 (맵, 셋, 해시 테이블)
비선형 자료 구조 (Non-Linear Data Structures) 비선형 자료 구조: 그래프, 트리, 해시 테이블, 힙, 맵, 셋, 우선순위 큐 등. ▼ 비선형 자료 구조 - 그래프와 트리에 대한 내용 [[CS] 자료 구조의 분류 - 비
velog.io
https://dev-get-jop.tistory.com/19
자료구조(Map, Set, HashTable)
1. 맵(Map) 맵이란 key 와 value 가 매칭 되는 것을 매핑이라고 하는데, 이러한 매핑을 통해 키와 값이 하나의쌍으로 연결되어 키를 통해 값에 접근할 수 있도록 만들어진 자료구조를 맵이라고 합니
dev-get-jop.tistory.com
https://joooootopia.tistory.com/13
Java Collection Framework :: 자바의 자료구조 (List, Set, Map)
Java Collection Framework(JCF): Java에서 데이터를 저장하는 자료구조들을 한 곳에 모아 편리하게 관리하고 사용하기 위해 제공하는 것. 크게 List, Set, Map으로 구분할 수 있다.이번 포스팅에서는 각각이
joooootopia.tistory.com
'자료구조' 카테고리의 다른 글
트리(Tree)/힙(Heap) 자료구조 (0) | 2024.12.19 |
---|---|
배열 / 리스트 (0) | 2024.12.10 |
스택(Stack)/큐(Queue)/덱(Deque) (0) | 2024.11.01 |