본문 바로가기
Computer Science/Data Structure

[DataStructure/Map, Set, List] Map vs Set vs List: 순서 보장과 중복 허용 차이 정리

by quessr 2025. 2. 12.

 

Map, Set, List는 대부분의 프로그래밍 언어에서 자주 사용되는 대표적인 자료구조입니다.
어렴풋이 알고 있다고 생각했지만, 막상 설명해보려니 정확하게 이해하지 못하고 있다는 느낌이 들었습니다.

그래서 이번 글에서는 Map, Set, List의 동작 방식과 구현체별 차이점을 정리하면서, 순서 보장 여부와 중복 허용 여부를 명확하게 정리해두려고 합니다.


1. Map, Set, List의 기본적인 차이점

특징 Map (Key-Value 저장) Set (중복 없는 값 저장) List (중복 허용, 순서 유지)
데이터 저장 방식 Key-Value 쌍으로 저장 중복 없는 단일 값(Value) 저장 중복을 허용하며 순서대로 값 저장
중복 허용 여부 Key 중복 ❌, Value는 중복 가능 중복 ❌ 중복 ⭕
순서 보장 여부 구현체에 따라 다름 구현체에 따라 다름 항상 순서 유지 ⭕

📌 핵심 차이점

  • Map은 Key-Value 쌍으로 저장하지만, Set과 List는 단일 값 저장
  •  Map에서는 Key가 중복될 수 없지만, Set에서는 값 자체가 중복될 수 없음
  •  List는 항상 순서를 유지하지만, Map과 Set은 특정 구현체에서만 순서를 유지

2. Map은 "순서를 보장하는가?"

"Map은 기본적으로 순서를 보장하지 않지만, 특정 구현체는 순서를 유지할 수 있습니다."

Map 구현체 순서 보장 여부 설명
HashMap ❌ 순서를 보장하지 않음 Key-Value가 저장된 순서가 유지되지 않음
LinkedHashMap ⭕ 입력된 순서를 유지 Key-Value가 추가된 순서대로 저장
TreeMap ⭕ Key 기준으로 정렬 Key를 오름차순(기본) 또는 지정된 Comparator에 따라 정렬

 

📌 정확한 표현:

  • "Map은 기본적으로 Key-Value 저장 방식을 사용하며, 특정 구현체(LinkedHashMap, TreeMap)만 순서를 보장합니다."

4. List는 항상 순서를 보장하는가?

→ "List는 항상 순서를 보장하며, 중복을 허용합니다."
List는 배열(Array)과 연결 리스트(Linked List)를 기반으로 동작하므로, 입력된 순서가 유지됩니다.

List 구현체 순서 보장 여부 중복 허용 여부 설명
ArrayList ⭕ 순서 유지 ⭕ 중복 허용 동적 배열 기반, 검색 빠름(O(1))
LinkedList ⭕ 순서 유지 ⭕ 중복 허용 이중 연결 리스트 기반, 삽입/삭제 빠름 (O(1))

5. Map, Set, List의 구현체별 비교 정리

구현체 구조 순서 보장 여부 중복 허용 여부
HashMap 해시 테이블 ❌ 순서를 보장하지 않음 Key 중복 ❌, Value 중복 ⭕
LinkedHashMap 해시 테이블 + 이중 연결 리스트 ⭕ 입력된 순서를 유지 Key 중복 ❌, Value 중복 ⭕
TreeMap 이진 탐색 트리 (Red-Black Tree) ⭕ Key 기준 정렬 Key 중복 ❌, Value 중복 ⭕
HashSet 해시 테이블 ❌ 순서를 보장하지 않음 중복 ❌
LinkedHashSet 해시 테이블 + 이중 연결 리스트 ⭕ 입력된 순서를 유지 중복 ❌
TreeSet 이진 탐색 트리 (Red-Black Tree) ⭕ 정렬된 순서 유지 중복 ❌
ArrayList 동적 배열 ⭕ 순서 유지 ⭕ 중복 허용
LinkedList 이중 연결 리스트 ⭕ 순서 유지 ⭕ 중복 허용

6. Map, Set, List를 선택할 때 고려할 점

중복 허용 여부

  • Map은 Key 중복이 불가능하지만, Value 중복은 가능
  • Set은 모든 요소가 중복될 수 없음
  • List는 중복을 허용함

순서 유지 여부

  • Map: 기본적으로 순서를 보장하지 않지만, LinkedHashMap과 TreeMap은 보장
  • Set: 기본적으로 순서를 보장하지 않지만, LinkedHashSet과 TreeSet은 보장
  • List: 항상 입력된 순서를 유지

어떤 경우에 어떤 구현체를 사용해야 할까?

  • "순서가 필요 없고 빠른 검색이 필요" → HashMap, HashSet
  • "입력된 순서를 유지해야 함" → LinkedHashMap, LinkedHashSet, List
  • "정렬된 상태로 데이터를 유지해야 함" → TreeMap, TreeSet

7. 요약

  • Map은 기본적으로 순서를 보장하지 않지만, 특정 구현체(LinkedHashMap, TreeMap)는 순서를 유지할 수 있습니다.
  •  Set은 기본적으로 중복을 허용하지 않으며, 특정 구현체(LinkedHashSet, TreeSet)는 순서를 유지할 수 있습니다.
  •  List는 항상 순서를 보장하며, 중복을 허용합니다.
  •  HashMap과 HashSet은 가장 빠르지만, 순서를 보장하지 않습니다.
  •  LinkedHashMap과 LinkedHashSet은 입력된 순서를 유지합니다.
  •  TreeMap과 TreeSet은 정렬된 순서를 유지합니다.
반응형