LinkedHashSet

LinkedHashSet<E>

Set<E> ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„ ํด๋ž˜์Šค์ด๋‹ค. (HashSet์˜ ์ž์‹ ํด๋ž˜์Šค, HashSet์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)

์ž…๋ ฅ ์ˆœ์„œ์™€ ์ถœ๋ ฅ ์ˆœ์„œ๋Š” ๋™์ผํ•˜๋‹ค. (๋‹จ, ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.)

// x
Set<E> set = new LinkedHashSet<>();

// o
HashSet<E> set = new LinkedHashSet<>();

์–ด๋–ป๊ฒŒ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ• ๊นŒ?

์•„๋ž˜ ๋‚ด์šฉ์€ ์ „๋ถ€ ํ•ด๋‹น ๋งํฌ์˜ ๋‚ด์šฉ์„ ๋ณต์‚ฌํ–ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์•ž์„œ ์• ๊ธฐํ•œ HashSet arrow-up-right์„ ์ƒ์† ๋ฐ›๋„๋ก ๋˜์–ด ์žˆ๊ณ , ๋ชจ๋“  ์ƒ์„ฑ์ž์—๋Š” ๋ณ„๋„์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ถ€๋ชจ(super()) ์ƒ์„ฑ์ž๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋˜์–ด ์žˆ๋‹ค.* ์ด 4๊ฐœ์˜ ์ƒ์„ฑ์ž*๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ ๋ชจ๋‘ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์ƒ์„ฑ์ž๋ฅผ ๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ, ๋ชจ๋‘ ๋ถ€๋ชจ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๋‹ค. ์ฆ‰, HashSet์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ํŠนํžˆ, HashSet์˜ ์ƒ์„ฑ์ž์ค‘ 5๋ฒˆ์งธ ํŒจํ‚ค์ง€๋‚ด์—์„œ๋งŒ ํ˜ธ์ถœํ• ์ˆ˜ ์žˆ๋Š” ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๋‹ค.

*์ฆ‰, LinkedHashSet์€ ๋ถ€๋ชจ์ธ HashSet์„ ๋งŒ๋“ค๊ณ  ๊ทธ๋ฆฌ๊ณ  ๋‚ด๋ถ€์ ์œผ๋กœ LinkedHashMap์„ ๋งŒ๋“ค๊ณ  ์žˆ๋‹ค. *

HashSet์˜ ๊ตฌํ˜„๊ณผ๋Š” ๋‹ค๋ฅธ๋ฐ,** ์ด์ค‘ ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ(Double Linked List)๋ฅผ ์œ ์ง€**ํ•œ๋‹ค. ์ด ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ๋Š” Iteration์˜ ์ˆœ์„œ๋ฅผ ์ •ํ•˜๋Š”๋ฐ, Iteration์˜ ์ˆœ์„œ๋Š” LinkedHashSet์— ์‚ฝ์ž…๋œ ์ˆœ์„œ์ด๋‹ค. ๋งŒ์•ฝ ํ•˜๋‚˜์˜ element๊ฐ€ ์žฌ ์‚ฝ์ž…๋˜๋”๋ผ๋„ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค. ํ•˜๋‚˜์˜ element ๊ฐ€ ์žฌ์‚ฝ์ž… ๋œ๋‹ค๋ฉด s.add(e) ์ด๋Ÿฐ์‹์œผ๋กœ ํ˜ธ์ถœ์ด ๋˜๋Š”๋ฐ, s.contains(e)๊ฐ€ true๋ฅผ ๋ฆฌํ„ดํ•˜๋„๋ก ๋˜์–ด ์ž‡๋‹ค. **HashSet๊ณผ์˜ ์ฐจ์ด์  ** ๊ฐ€์žฅ ํฐ ์ฐจ์ด๋Š” ์ž…๋ ฅํ•œ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์˜จ๋‹ค๋Š” ์ ์ด๋‹ค.

3์„ ๋‚˜์ค‘์— ๋„ฃ์—ˆ๋Š”๋ฐ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ๋Œ€๋กœ ์ค‘๋ณต๋˜๋Š” ๊ฒƒ์€ ์‚ฝ์ž…์ด ๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ฆฌ๊ณ  311์„ ๋„ฃ์—ˆ์„๋•Œ ์ •๋ ฌ๋˜์ง€ ์•Š์€์ฑ„ ์ œ์ผ ๋งˆ์ง€๋ง‰์— ์‚ฝ์ž…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ œ์ผ ๋’ค์— ์žˆ๋Š”๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค. ์žฌ ์‚ฝ์ž…๋˜๋Š” ๊ฒฝ์šฐ, ๋‚ด๋ถ€ ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋Œ์•„๊ฐ€๋Š”์ง€ ๋ณด์ž. s.ad(e)๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ ๋˜๋ฉด ๋ถ€๋ชจ์ธ HashSet์˜ add()๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  ๋‚ด๋ถ€์ ์œผ๋กœ LinkedHashMap์„ ๊ฑฐ์ ธ์„œ HashMap์˜ put() ํ•จ์ˆ˜๋กœ ์—ฐ๊ฒฐ๋˜๋Š” ๊ฒƒ์„ ๋ณผ์ˆ˜๊ฐ€ ์žˆ๋‹ค.(GrepCode) ์ฆ‰, HashMap์˜ put() ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ element๊ฐ€ ์‚ฝ์ž…๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ค‘๋ณต์ œ๊ฑฐ๊ฐ€ ๋œ๋‹ค.

์ •๋ ฌ

HashSet์˜ CHOATIC Ordering ํ•ด๊ฒฐ๋ฒ• ์œ„์—์„œ ๋ณธ๊ฒƒ ์ฒ˜๋Ÿผ HashSet์€ ์ด์ƒํ•œ ์ •๋ ฌ์„ ๊ฐ€์ง„๋‹ค. ์ด๊ฒƒ์€ ์ž๋ฐ” ๊ณต์‹ ๋ฌธ์„œ์—์„œ๋„ Choatic ordering ์ด๋ผ๊ณ  ๋งํ•˜๊ณ  ์žˆ์„ ์ •๋„์ธ๋ฐ, HashSet์€ ์ •๋ ฌ์ด ์ดํ•ดํ• ์ˆ˜๊ฐ€ ์—†๊ณ , LinkedHashSet์€ ์ž…๋ ฅํ•œ ์ˆœ์„œ๋Œ€๋กœ ๋“ค์–ด๊ฐ„๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ •๋ ฌ์„ ํ•ด์•ผํ•  ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ ฌ์„ ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด** TreeSet์„ ์จ์„œ ์ด์ „ Set์„ copyํ•˜๋Š” ๋™์‹œ์— ์ •๋ ฌํ•˜๋ฉด ๋œ๋‹ค. **

์„ฑ๋Šฅ๋ฌธ์ œ

** ์„ฑ๋Šฅ์€ HashSet arrow-up-right๋ณด๋‹ค ์•ฝ๊ฐ„ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋Š”๋ฐ ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•˜๋Š”๋ฐ ๋น„์šฉ์ด ๋“ ๋‹ค๊ณ  ํ•œ๋‹ค. ํ•œ๊ฐ€์ง€ ์˜ˆ์™ธ๋กœ๋Š” LinkedHashSet์˜ Iteration ์€ capacity(capacity ์™€ size ๋Š” ๋‹ค๋ฅด๋‹ค. HashMap ์ •๋ฆฌ ์ฐธ๊ณ arrow-up-right)์— ์ƒ๊ด€์—†์ด Set์˜ ์‚ฌ์ด์ฆˆ์— ๋น„๋ก€ํ•˜๋Š” ์‹œ๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํ•œ๋‹ค. ** LinkedHashSet์€ ๋‘๊ฐ€์ง€ ์š”์†Œ์— ๋Œ€ํ•ด์„œ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค initial capacity์™€ load factor ์ธ๋ฐ ์ด๊ฒƒ๋“ค์ด ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์ด์œ ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ HashMaparrow-up-right์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฃผ์˜ํ•  ์ ์€ Iteration ์€ capacity์— ์˜ํ–ฅ์„ ๋ฐ›๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋Š” ์ ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋†’์€ initial capacity๋ฅผ ์ค„ ํ•„์š”๋Š” ์—†๋‹ค. **๋™๊ธฐํ™” ** ๋™๊ธฐํ™”๋Š” LinkedHashSet์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด synchronizedSet() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.

Last updated