빈 ꡬ멍 μ±„μš°κΈ°

[Java] Set과 Map의 차이점

⭐⭐기둝 2024. 9. 3. 18:12

좜처

ChatGPT


μžλ°”μ—μ„œ `Set`κ³Ό `Map`은 μ»¬λ ‰μ…˜ ν”„λ ˆμž„μ›Œν¬μ˜ μ£Όμš” μΈν„°νŽ˜μ΄μŠ€λ‘œ, μ„œλ‘œ λ‹€λ₯Έ μš©λ„λ‘œ μ‚¬μš©λœλ‹€. 두 κ΅¬μ‘°λŠ” 기본적으둜 데이터λ₯Ό μ €μž₯ν•˜κ³  μ²˜λ¦¬ν•˜λŠ” λ°©μ‹μ—μ„œ 차이λ₯Ό 보인닀.

 

1. `Set`

μ •μ˜

`Set`은 μ€‘λ³΅λ˜μ§€ μ•ŠλŠ” μš”μ†Œμ˜ 집합을 λ‚˜νƒ€λ‚΄λŠ” μ»¬λ ‰μ…˜μ΄λ‹€. `Set`의 μ£Όμš” νŠΉμ§•μ€ 같은 값이 두 번 이상 μ €μž₯λ˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것이닀.

μ£Όμš” κ΅¬ν˜„μ²΄

`HashSet`

ν•΄μ‹œ 기반으둜 κ΅¬ν˜„λœ `Set`이닀. μš”μ†Œλ₯Ό ν•΄μ‹œ ν…Œμ΄λΈ”μ— μ €μž₯ν•˜λ©°, ν‰κ· μ μœΌλ‘œ O(1)의 μ‹œκ°„ λ³΅μž‘λ„λ‘œ μš”μ†Œλ₯Ό μΆ”κ°€, 제거, 검색할 수 μžˆλ‹€. μˆœμ„œλ₯Ό 보μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€.

`LinkedHashSet`

`HashSet`의 κ΅¬ν˜„μ²΄λ‘œ, μš”μ†Œμ˜ μˆœμ„œλ₯Ό μœ μ§€ν•œλ‹€. λ‚΄λΆ€μ μœΌλ‘œ ν•΄μ‹œ ν…Œμ΄λΈ”κ³Ό λ§ν¬λ“œ 리슀트λ₯Ό μ‚¬μš©ν•˜μ—¬ μˆœμ„œ 보μž₯을 ν•œλ‹€.

`TreeSet`

μ •λ ¬λœ μˆœμ„œλ₯Ό μœ μ§€ν•˜λŠ” `Set`이닀. λ‚΄λΆ€μ μœΌλ‘œ 이진 탐색 트리(트리)λ₯Ό μ‚¬μš©ν•˜μ—¬ μš”μ†Œλ₯Ό μ •λ ¬λœ μƒνƒœλ‘œ μœ μ§€ν•œλ‹€. μš”μ†Œμ˜ μΆ”κ°€, 제거, 검색에 O(log n)의 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ°€μ§„λ‹€.

**μ£Όμš” λ©”μ†Œλ“œ**:

  • `add(E e)`: μš”μ†Œλ₯Ό μΆ”κ°€ν•œλ‹€. μ€‘λ³΅λœ μš”μ†ŒλŠ” μΆ”κ°€λ˜μ§€ μ•ŠλŠ”λ‹€.
  • `remove(Object o)`: νŠΉμ • μš”μ†Œλ₯Ό μ œκ±°ν•œλ‹€.
  • `contains(Object o)`: νŠΉμ • μš”μ†Œκ°€ `Set`에 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•œλ‹€.
  • `size()`: `Set`의 μš”μ†Œ 개수λ₯Ό λ°˜ν™˜ν•œλ‹€.

2. `Map`

μ •μ˜

`Map`은 ν‚€-κ°’ μŒμ„ μ €μž₯ν•˜λŠ” 데이터 ꡬ쑰이닀. 각 ν‚€λŠ” μœ μΌν•΄μ•Ό ν•˜λ©°, 각 킀에 λŒ€ν•΄ ν•˜λ‚˜μ˜ κ°’λ§Œ μ €μž₯λœλ‹€. `Map`은 ν‚€λ₯Ό 톡해 값을 효율적으둜 μ‘°νšŒν•  수 μžˆλ„λ‘ μ„€κ³„λ˜μ–΄ μžˆλ‹€.

μ£Όμš” κ΅¬ν˜„μ²΄

`HashMap`

ν•΄μ‹œ 기반으둜 κ΅¬ν˜„λœ `Map`이닀. ν‚€-κ°’ μŒμ„ ν•΄μ‹œ ν…Œμ΄λΈ”μ— μ €μž₯ν•˜λ©°, ν‰κ· μ μœΌλ‘œ O(1)의 μ‹œκ°„ λ³΅μž‘λ„λ‘œ μš”μ†Œλ₯Ό μΆ”κ°€, 제거, 검색할 수 μžˆλ‹€. μˆœμ„œλ₯Ό 보μž₯ν•˜μ§€ μ•ŠλŠ”λ‹€.

`LinkedHashMap`

`HashMap`의 κ΅¬ν˜„μ²΄λ‘œ, μš”μ†Œμ˜ μˆœμ„œλ₯Ό μœ μ§€ν•œλ‹€. λ‚΄λΆ€μ μœΌλ‘œ ν•΄μ‹œ ν…Œμ΄λΈ”κ³Ό λ§ν¬λ“œ 리슀트λ₯Ό μ‚¬μš©ν•˜μ—¬ μˆœμ„œ 보μž₯을 ν•œλ‹€.

`TreeMap`

μ •λ ¬λœ μˆœμ„œλ₯Ό μœ μ§€ν•˜λŠ” `Map`이닀. λ‚΄λΆ€μ μœΌλ‘œ 이진 탐색 트리(트리)λ₯Ό μ‚¬μš©ν•˜μ—¬ ν‚€λ₯Ό μ •λ ¬λœ μƒνƒœλ‘œ μœ μ§€ν•œλ‹€. μš”μ†Œμ˜ μΆ”κ°€, 제거, 검색에 O(log n)의 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ°€μ§„λ‹€.

μ£Όμš” λ©”μ†Œλ“œ

  • `put(K key, V value)`: 킀와 값을 μΆ”κ°€ν•˜κ±°λ‚˜ μ—…λ°μ΄νŠΈν•œλ‹€.
  • `get(Object key)`: ν‚€λ₯Ό 톡해 값을 μ‘°νšŒν•œλ‹€.
  • `remove(Object key)`: νŠΉμ • 킀에 ν•΄λ‹Ήν•˜λŠ” 값을 μ œκ±°ν•œλ‹€.
  • `containsKey(Object key)`: νŠΉμ • ν‚€κ°€ `Map`에 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•œλ‹€.
  • `containsValue(Object value)`: νŠΉμ • 값이 `Map`에 μ‘΄μž¬ν•˜λŠ”μ§€ ν™•μΈν•œλ‹€.

`Set`κ³Ό `Map`의 μ£Όμš” 차이점 μš”μ•½

데이터 μ €μž₯ 방식

  • `Set`은 단일 κ°’λ§Œ μ €μž₯ν•œλ‹€ (쀑볡 μ—†μŒ).
  • `Map`은 ν‚€-κ°’ μŒμ„ μ €μž₯ν•œλ‹€ (ν‚€λŠ” μœ μΌν•΄μ•Ό ν•˜λ©° 값은 쀑볡 κ°€λŠ₯).

λͺ©μ 

  • `Set`은 쀑볡 μ—†λŠ” μš”μ†Œμ˜ 집합을 ν•„μš”λ‘œ ν•  λ•Œ μ‚¬μš©λœλ‹€.
  •  `Map`은 νŠΉμ • 킀에 λŒ€ν•œ 값을 효율적으둜 μ €μž₯ν•˜κ³  μ‘°νšŒν•  λ•Œ μ‚¬μš©λœγ„·λ‹€.

μˆœμ„œ 보μž₯

  •  `Set`은 기본적으둜 μš”μ†Œμ˜ μˆœμ„œλ₯Ό 보μž₯ν•˜μ§€ μ•ŠμœΌλ©°, μˆœμ„œλ₯Ό 보μž₯ν•˜λŠ” `LinkedHashSet`μ΄λ‚˜ μ •λ ¬λœ μˆœμ„œλ₯Ό μœ μ§€ν•˜λŠ” `TreeSet`도 μžˆλ‹€. 
  •  `Map`은 기본적으둜 μˆœμ„œλ₯Ό 보μž₯ν•˜μ§€ μ•ŠμœΌλ©°, μˆœμ„œλ₯Ό 보μž₯ν•˜λŠ” `LinkedHashMap`μ΄λ‚˜ μ •λ ¬λœ μˆœμ„œλ₯Ό μœ μ§€ν•˜λŠ” `TreeMap`도 μžˆλ‹€.