ki-sd 님의 블로그
[2026-04-03] Set과 Map의 논리적 구조와 중복 제어 본문
데이터를 단순히 줄 세우는 List를 넘어, 각기 다른 고유한 특성을 가진 자료구조인 Set과 Map의 메커니즘을 해부하고 데이터 핸들링 로직을 고도화했다.
1. Set: 순서가 없고 중복을 불허하는 집합
- HashSet은 데이터를 저장할 때 인덱스가 부여되지 않으며, 내부적으로 동일한 데이터가 들어오면 무시하는 수학의 '집합'과 같은 성질을 띤다.
- 객체의 중복을 판별하기 위해 자바가 내부적으로 객체의 hashCode() 값을 먼저 비교하고, 같으면 equals()로 한 번 더 비교하는 구조를 이해했다. 이를 통해 내가 만든 커스텀 객체(예: 동명이인의 사원 객체)가 중복 저장되지 않도록 두 메서드를 오버라이딩하는 실무적 테크닉을 익혔다.
2. Map: Key와 Value의 쌍(Pair) 구조
- HashMap은 데이터를 키(Key)와 값(Value)의 형태로 묶어서 저장한다. 키는 중복을 허용하지 않으며(Set의 원리), 값은 중복될 수 있다. 인덱스 대신 키를 통해 데이터에 즉각적으로 접근하므로 검색 속도가 매우 빠르다.
3. 실전 응용: 영어 단어 빈도수 계산기
- 문장 내에서 특정 단어가 몇 번 등장했는지 카운트하는 알고리즘을 HashMap으로 구현했다.
- 새로운 단어가 들어오면 키가 존재하는지 판단하여(containsKey), 없을 경우 분기문(if-else)을 통해 초기값 1을 세팅하고, 이미 존재하는 키라면 기존 값을 꺼내 +1로 덮어쓰는(Update) 데이터 축적의 전체 흐름을 하나씩 코드로 뜯어보며 자료구조의 강력함을 실전으로 느꼈다.
'JavaStudy' 카테고리의 다른 글
| [2026-04-07] 자바 I/O의 시작 - File 클래스와 시스템 제어 (0) | 2026.04.17 |
|---|---|
| [2026-04-06] 람다식(Lambda)과 스트림(Stream) API를 통한 함수형 프로그래밍 (0) | 2026.04.17 |
| [2026-04-02] 가변 크기 배열 ArrayList와 제네릭(Generics)의 안정성 (0) | 2026.04.17 |
| [2026-04-01] 리플렉션(Reflection)과 메타 프로그래밍의 기초 (0) | 2026.04.17 |
| [2026-03-31] Wrapper 클래스와 시간 API 처리에 대한 고찰 (0) | 2026.04.17 |
