๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[Java] Set๊ณผ Map์˜ ์ฐจ์ด์ 

์ถœ์ฒ˜

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`๋„ ์žˆ๋‹ค.