HashSet vs HashMap
✅ HashSet vs HashMap
Java에서 HashSet
과 HashMap
은 모두 Hash Table 기반의 자료구조입니다. 둘 다 빠른 삽입/탐색/삭제가 가능하지만, 저장 방식과 사용 목적은 다릅니다.
✅ HashSet
HashSet
은 중복을 허용하지 않는 집합(Set) 구조입니다.
내부적으로는 HashMap
을 사용하여 원소들을 저장합니다. 순서는 보장되지 않으며, 값만 저장됩니다.
📌 주요 메서드
메서드 | 시간 복잡도 | 설명 |
---|---|---|
add(e) | O(1) | 원소 추가 |
contains(e) | O(1) | 포함 여부 조회 |
remove(e) | O(1) | 원소 삭제 |
Iterator 순회 | O(N) | 순회 (순서는 무작위) |
📍 언제 써야 하는지 (O(1))
- 중복 제거가 필요할 때
- 빠른 포함 여부 확인이 필요할 때
📍 언제 쓰지 말아야 하는지
- 원소의 순서가 중요할 때 (→
LinkedHashSet
또는TreeSet
) - 빈번한 정렬 또는 범위 탐색이 필요할 때
💡 예시 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.util.HashSet;
import java.util.Set;
public class HashSetExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("apple"); // 중복 무시
System.out.println(set.contains("banana")); // true
set.remove("banana");
System.out.println(set); // [apple]
}
}
✅ HashMap
HashMap
은 키(key)-값(value) 쌍을 저장하는 자료구조입니다.
키는 중복이 불가능하며, 값은 중복이 가능합니다. 내부적으로 HashTable
을 사용하여 효율적인 키-값 매핑을 제공합니다.
📌 주요 메서드
메서드 | 시간 복잡도 | 설명 |
---|---|---|
put(k, v) | O(1) | 키-값 추가 또는 수정 |
get(k) | O(1) | 키로 값 조회 |
containsKey(k) | O(1) | 키 존재 여부 확인 |
remove(k) | O(1) | 키로 삭제 |
keySet()/entrySet() | O(N) | 전체 순회 |
📍 언제 써야 하는지 (O(1))
- 키-값 매핑이 필요할 때
- 빠른 조회, 수정, 삭제가 필요할 때
📍 언제 쓰지 말아야 하는지
- 삽입 순서 또는 정렬된 키 순서가 중요할 때 (→
LinkedHashMap
또는TreeMap
) - 값 기준 정렬/탐색이 필요할 때
💡 예시 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.HashMap;
import java.util.Map;
public class HashMapExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("apple", 3);
map.put("banana", 2);
map.put("apple", 5); // 기존 값 수정
System.out.println(map.get("apple")); // 5
System.out.println(map.containsKey("banana")); // true
map.remove("banana");
for (String key : map.keySet()) {
System.out.println(key + " => " + map.get(key));
}
}
}
This post is licensed under CC BY 4.0 by the author.