[Java] HashSet์ด๋ž€?

ํ•œ๋™์šฐยท2025๋…„ 4์›” 20์ผ

Java

๋ชฉ๋ก ๋ณด๊ธฐ
3/4
post-thumbnail

๐Ÿ“˜ Set๋ž€?

Set์€ JCF(Java Collection Framework)์˜ ์ธํ„ฐํŽ˜์ด์Šค ์ค‘ ํ•˜๋‚˜๋กœ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  ์ €์žฅ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€ ๋น„์„ ํ˜• ๊ตฌ์กฐ ์ธํ„ฐํŽ˜์ด์Šค์ด๊ณ , ๋Œ€ํ‘œ์ ์ธ ๊ตฌํ˜„์ฒด๋กœ TreeSet, HashSet, LinkedHashSet์ด ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“˜ HashSet?


์ถœ์ฒ˜: https://www.tpointtech.com/hash-table

HashSet์ด๋ž€ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ตฌํ˜„์ฒด๋กœ Set์˜ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ์ค‘๋ณต ๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.


โš™๏ธ HashSet ๋™์ž‘ ์›๋ฆฌ

IntelliJ IDEA์—์„œ HashSet ๊ตฌ์กฐ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚ด๋ถ€์ ์œผ๋กœ HashMap์„ ์ด์šฉํ•˜์—ฌ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, HashSet์€ ๋ฐ์ดํ„ฐ๋ฅผ HashMap์˜ ํ‚ค(Key)๋กœ ์ €์žฅํ•˜๋ฉฐ, ๊ฐ’(Value)๋Š” ๋ชจ๋‘ ๊ฐ™์€ ๋”๋ฏธ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘๋ณต๋œ ํ‚ค(Key)๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” Map์˜ ํŠน์„ฑ์„ ์ด์šฉํ•˜์—ฌ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

โ“ ๊ทธ๋Ÿผ HashSet์€ ์–ด๋–ค ์›๋ฆฌ๋กœ ์ค‘๋ณต์„ ์ œ๊ฑฐํ• ๊นŒ?


hashCode(), equals()

์ž๋ฐ”์—๋Š” ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” hashCode๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด

set.add("apple");

๋‚ด๋ถ€์ ์œผ๋กœ๋Š” HashMap์„ ์ด์šฉํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

map.put("apple", PRESENT);

์ด ๋•Œ, HashMap์€ apple ๊ฐ์ฒด์˜ hashCode()๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ํ•ด๋‹น ํ•ด์‹œ๊ฐ’์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ๋ฒ„ํ‚ท ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ํ•ด๋‹น ์œ„์น˜์— ๋™์ผํ•œ ๊ฐ์ฒด(equals()๊ฐ€ true์ธ)๊ฐ€ ์—†๋‹ค๋ฉด ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

โ€ผ๏ธ hashCode()์™€ equals()๋ฅผ ์ œ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์œผ๋ฉด ์ค‘๋ณต์ด ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์•„ HashSet์˜ ์ค‘๋ณต ๋ฐฉ์ง€ ๊ธฐ๋Šฅ์ด ๋ฌด์˜๋ฏธํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ฒ˜๋Ÿผ HashSet์ด ํšจ์œจ์ ์œผ๋กœ ์ค‘๋ณต ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” hashCode()๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•ด์‹œ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰์„ ํ•˜์—ฌ ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ์ขํžˆ๊ณ  ๋™์ผํ•œ ํ•ด์‹œ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐequals()๋กœ ์ •ํ™•ํ•œ ์ค‘๋ณต ์—ฌ๋ถ€๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€