HashSet, TreeSet, LinkedHashSet - her0807/java-baseball-precourse GitHub Wiki

์ˆซ์ž ์ค‘๋ณต์„ ์ฒดํฌํ•˜๋ฉฐ ๋ฐœ๊ฒฌํ•œ ์˜ค๋ฅ˜

์ˆซ์ž ์ค‘๋ณต ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ• ๊นŒ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ž๋ฃŒํ˜•์ธ Set ์ด ๋– ์˜ฌ๋ž๋‹ค.

์ •๋ ฌ์€ ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— HashSet์„ ์„ ํƒํ•˜๊ณ  ๊ตฌํ˜„ํ–ˆ๋‹ค.

ํ…Œ์ŠคํŠธ๋กœ 123, 456 489 ๋“ฑ์„ ๋„ฃ์—ˆ๋‹ค. ๊ฒฐ๊ณผ ๊ฐ’์ด ์ž˜ ๋‚˜์™”๋‹ค.

๋‹ค์Œ์œผ๋กœ 986์„ ๋„ฃ์—ˆ๋”๋‹ˆ 689๋กœ ์ถœ๋ ฅ๋˜์—ˆ๋‹ค ๋ญ์ง€? ํ•˜๊ณ  ์ฐพ์•„๋ณด๋‹ˆ HashSet์€ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋‹จ์ ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

์ด ๋ถ€๋ถ„์€ LinkedHashSet๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค. ์ด ์ฐธ์— Set์— ๋Œ€ํ•ด ๊นŠ๊ฒŒ ์•Œ์•„๋ณด์ž.


HashSet์€ ์™œ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์„๊นŒ?

๋‚ด๋ถ€๋ฅผ ์‚ดํŽด๋ณด๋‹ˆ ๋‚ด๋ถ€๊ฐ€ HashMap ์œผ๋กœ ๊ตฌํ˜„ ๋˜์–ด ์žˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ HashMap, HashSet ์€ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.

๊ทธ๋Ÿผ ๋žœ๋ค์œผ๋กœ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋‚˜???

์ง์ ‘ ์ฐ์–ด๋ณด๋‹ˆ ๋งค๋ฒˆ ๋˜‘๊ฐ™์ด 689 ๋กœ ๋‚˜์™”๋‹ค. ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ์˜๋ฌธ์ด ์ƒ๊ฒผ๋‹ค.

  • ์™œ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ๋‚˜์˜ค์ง€?
  • ์™œ ๋žœ๋ค์ด ์•„๋‹ˆ๋ผ ๊ณ„์† ์ผ์ •ํ•œ ๊ฐ’ ์ด ๋‚˜์˜ค์ง€?
hashMap์€ Key๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— key ๊ฐ’์ด ๊ณ ์œ ํ•ด์•ผํ•˜๋‹ˆ๊นŒ 

hashCode ๊ฐ’์ด ์ž‘์€ ๊ฐ’ ์ˆœ์„œ๋กœ ์ €์žฅํ•ด์„œ ๊ฒฐ๊ณผ ๊ฐ’์ด ์ด๋ ‡๊ฒŒ ๋‚˜์˜ค๋‚˜??? ์œ ์ถ”ํ•ด๋ดค๋‹ค.

HashCode ์ถœ๋ ฅ

์œ ์ถ”๊ฐ€ ํ‹€๋ ธ๋‹ค.. 11์˜ ํ•ด์‹œ์ฝ”๋“œ๊ฐ€ ์ œ์ผ ํฐ๋ฐ ์ฒซ๋ฒˆ์งธ๋กœ ์ €์žฅ๋˜์–ด ์ถœ๋ ฅ๋˜์—ˆ๋‹ค. ๋ฌด์Šจ ๋ฌธ์ œ์ธ๊ฑธ๊นŒ ๋” ๊นŠ๊ฒŒ ๋“ค์–ด๊ฐ€๋ณธ๋‹ค.

HashMap ๋‚ด๋ถ€ ๊ตฌ์กฐ๋Š” ๋ฐฐ์—ด์ด์—ˆ๋‹ค.

์—ฐ์‚ฐ ์‹œ๊ฐ„์„ O(1) ์œผ๋กœ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฐฐ์—ด์— ์ธ๋ฑ์Šค์— ๋ฐ”๋กœ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๊ตฌํ˜„๋˜์–ด ์žˆ์—ˆ๋‹ค.

๋ฐฐ์—ด์˜ ์ดˆ๊ธฐ ํฌ๊ธฐ๋Š” 16์ด๋ผ๊ณ ํ•œ๋‹ค. ์ด์ œ ์—ฌ๊ธฐ์„œ ํ•ด์‹ฑ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋– ์˜ฌ๋ ค๋ณธ๋‹ค..

๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ ๋กœ์ง์„ ๋ณด์ž

add -> put -> hash ๊นŒ์ง€ ๊ฐ€๋‹ˆ 16์œผ๋กœ ๊ณ„์‚ฐ์„ ํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

HashTable ์ ์žฌ ๋ฐฉ๋ฒ•์€ ํ•ด์‹œ์ฝ”๋“œ % ํ…Œ์ด๋ธ” ํฌ๊ธฐ = ๋‚˜๋จธ์ง€๋ฅผ ์ธ๋ฑ์Šค ์ฃผ์†Œ๋กœ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ˜„์žฌ ๋ฐฐ์—ด์˜ ์ดˆ๊ธฐ ํฌ๊ธฐ๋Š” 16์ด๋‹ˆ๊นŒ ๋‚˜๋ˆ ์„œ ๋‚˜๋จธ์ง€๋ฅผ ์‹ค์ œ ์ธ๋ฑ์Šค๋ž‘ ๋น„๊ตํ•ด๋ณด์ž.

์ˆœ์„œ์™€ ์ธ๋ฑ์‹ฑ ๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•œ๋‹ค.. !! ์ด๊ฑฐ์˜€์–ด ใ… ใ… ใ… ใ… ใ… ใ…  ์ฐพ์•˜๋‹ค ์ฐพ์•˜์–ด...

์™œ ์ž…๋ ฅํ•œ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅ์ด ์•ˆ๋˜๋Š”์ง€ ํŒŒ์•…ํ–ˆ๋‹ค. ์ด์ œ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅํ•ด๋ณด์ž!!!

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•(HashSet -> LinkedHashSet)

์œ„์— ์ ์€ ๊ทธ๋Œ€๋กœ LinkedHashSet ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์„œ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

์™œ๋ƒํ•˜๋ฉด LinkedList๋Š” ๋…ธ๋“œ๋ฅผ ์ด์ค‘์œผ๋กœ ์—ฐ๊ฒฐํ•ด ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋œ๋‹ค.

๋А๋‚€์ 

๊นŠ๊ฒŒ ํŒŒ๊ณ ๋“ค๋‹ค๋ณด๋‹ˆ ์‹œ๊ฐ„์ด ํ›Œ์ฉ ์ง€๋‚ฌ๋‹ค. ์ž๋ฃŒ๊ตฌ์กฐ ์‚ฌ์šฉ์„ ์œ„ํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ์–ด๋–ค ๊ฒƒ์ด ์žˆ๋Š”์ง€๋Š” ์•Œ์•˜์ง€๋งŒ, 

๋‚ด๋ถ€ ๋™์ž‘์— ๋Œ€ํ•ด์„œ๋Š” ์ž˜ ๋ชฐ๋ž๋‹ค. ์•ž์œผ๋กœ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋‚ด๋ถ€๋ฅผ ์‚ดํŽด๋ณด๊ณ  ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

ps. ๊ธ€์“ฐ๋Š” ๋ฐฉ๋ฒ•์„ ์ตํžˆ๋Š” ์ค‘์ด๋ผ ๊ธ€ ์ •๋ฆฌ๊ฐ€ ์ž˜ ์•ˆ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. (ํ”ผ๋“œ๋ฐฑ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค!) 

์ฐธ๊ณ