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

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

[Java] HashSet์˜ load factor

์ถœ์ฒ˜

ChatGPT


HashSet์€ ์ž๋ฐ”์—์„œ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ง‘ํ•ฉ(Set) ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ HashMap์„ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉฐ, HashSet์˜ ์„ฑ๋Šฅ ํŠน์„ฑ(ํŠนํžˆ ์‚ฝ์ž…๊ณผ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ)์€ HashMap๊ณผ ๋งค์šฐ ๋ฐ€์ ‘ํ•œ ๊ด€๋ จ์ด ์žˆ๋‹ค. HashSet์˜ load factor(๋ถ€ํ•˜์œจ)๋Š” HashMap์˜ load factor์™€ ๋™์ผํ•œ ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ”์—์„œ ์„ฑ๋Šฅ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์กฐ์ ˆํ•˜๋Š” ์ค‘์š”ํ•œ ์š”์†Œ์ด๋‹ค.

 

1. load factor ๋ž€?

load factor(๋ถ€ํ•˜์œจ)๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ๋ฒ„ํ‚ท์ด ์–ผ๋งˆ๋‚˜ ์ฐจ์•ผ ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ฅผ ์ž๋™์œผ๋กœ ๋Š˜๋ฆด์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฐ’์ด๋‹ค. ์ฆ‰, ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ์–ผ๋งˆ๋‚˜ ์ฑ„์›Œ์ง€๋ฉด ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ฌ ๊ฒƒ์ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ธฐ์ค€์ด๋‹ค.

๊ธฐ๋ณธ ๊ฐ’

์ž๋ฐ”์˜ HashSet ๋ฐ HashMap์—์„œ ๊ธฐ๋ณธ load factor๋Š” 0.75์ด๋‹ค. ์ฆ‰, ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด 75% ์ฐจ๊ฒŒ ๋˜๋ฉด, ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋ฅผ 2๋ฐฐ๋กœ ํ™•์žฅํ•œ๋‹ค.

๊ณต์‹

load factor = ์ €์žฅ๋œ ์š”์†Œ ์ˆ˜ / ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ๋ฒ„ํ‚ท ์ˆ˜

 

์˜ˆ๋ฅผ ๋“ค์–ด, HashSet์ด 16๊ฐœ์˜ ๋ฒ„ํ‚ท์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ์—ฌ๊ธฐ์— 12๊ฐœ์˜ ์š”์†Œ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๋ฉด, load factor๋Š” 12/16 = 0.75๊ฐ€ ๋œ๋‹ค. ์ด ๊ฐ’์ด load factor ๊ฐ’์„ ๋„˜์œผ๋ฉด, ํ…Œ์ด๋ธ”์ด ํ™•์žฅ๋œ๋‹ค.

 

2. load factor์˜ ์—ญํ• 

์„ฑ๋Šฅ

load factor์˜ ํ•ด์‹œ ์ถฉ๋Œ๊ณผ ๊ด€๋ จ์ด ๊นŠ๋‹ค. ์ถฉ๋Œ์ด ๋งŽ์ด ๋ฐœ์ƒํ•˜๋ฉด ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๋Š”๋ฐ, ์ถฉ๋Œ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ์–ด๋Š ์ •๋„ ์—ฌ์œ  ๊ณต๊ฐ„์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. load factor๊ฐ€ ๋‚ฎ์„์ˆ˜๋ก ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ์ค„์–ด๋“ค์–ด ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋œ๋‹ค. ๋ฐ˜๋ฉด, ๋„ˆ๋ฌด ๋‚ฎ์€ load factor๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ

ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ ๊ณต๊ฐ„๊ณผ ์‹œ๊ฐ„ ์‚ฌ์ด์˜ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๊ฐ€ ์กด์žฌํ•œ๋‹ค. laod factor๊ฐ€ ๋‚ฎ์œผ๋ฉด ์ถฉ๋Œ์ด ์ ๊ณ  ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜์ง€๋งŒ, ๋งŽ์€ ๋นˆ ๋ฒ„ํ‚ท์„ ์œ ์ง€ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•œ๋‹ค. ๋ฐ˜๋Œ€๋กœ load factor๊ฐ€ ๋†’์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ์ ˆ์•ฝ๋˜์ง€๋งŒ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ ธ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.

 

3. HashSet์˜ ์ดˆ๊ธฐ ์šฉ๋Ÿ‰๊ณผ laod factor ์„ค์ •

HashSet์„ ์ƒ์„ฑํ•  ๋•Œ ์ดˆ๊ธฐ ์šฉ๋Ÿ‰๊ณผ load factor๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ์„ฑ๋Šฅ์„ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ธฐ๋ณธ ์ƒ์„ฑ์ž

๊ธฐ๋ณธ ์ ์œผ๋กœ HashSet์˜ ์ดˆ๊ธฐ ์šฉ๋Ÿ‰์€ 16์ด๋ฉฐ, load factor๋Š” 0.75์ด๋‹ค.

HashSet<String> set = new HashSet<>();

 

์ดˆ๊ธฐ ์šฉ๋Ÿ‰๊ณผ load factor ์„ค์ •

ํŠน์ • ์ดˆ๊ธฐ ์šฉ๋Ÿ‰๊ณผ load factor ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

HashSet<String> set = new HashSet<>(initialCapacity, loadFactor);

 

  • initialCapacity : ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์ดˆ๊ธฐ ํฌ๊ธฐ(๋ฒ„ํ‚ท ์ˆ˜)
  • loadFactor : ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ์–ผ๋งˆ๋‚˜ ์ฐจ๋ฉด ํฌ๊ธฐ๋ฅผ ํ™•์žฅํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฐ’

์˜ˆ์‹œ

HashSet<String> set = new HashSet<>(32, 0.5f);

 

์œ„์˜ ์˜ˆ์—์„œ๋Š” HashSet์˜ ์ดˆ๊ธฐ ์šฉ๋Ÿ‰์ด 32์ด๊ณ , load factor๋Š” 0.5์ด๋‹ค. ์ฆ‰, ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด 50% ์ฐจ๋ฉด ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฌ๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค.

 

4.  ํ™•์žฅ ํ…Œ์ด๋ธ” ํ™•์žฅ ๊ณผ์ •

ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ load factor๊ฐ€ ์ž„๊ณ„์น˜์— ๋„๋‹ฌํ•˜๋ฉด ํฌ๊ธฐ๋ฅผ ํ™•์žฅํ•œ๋‹ค. ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ํ™•์žฅ๋  ๋•Œ๋งˆ๋‹ค ๊ธฐ์กด ์š”์†Œ๋“ค์˜ ํ•ด์‹œ ๊ฐ’์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•ด ์ƒˆ๋กœ์šด ๋ฒ„ํ‚ท์— ์žฌ๋ฐฐ์น˜ํ•œ๋‹ค. ์ด๊ณผ์ •์„ ๋ฆฌํ•ด์‹ฑ(rehashing)์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋ฆฌํ•ด์‹ฑ ๊ณผ์ •

  • load factor๊ฐ€ ์ดˆ๊ณผ๋˜๋ฉด ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๊ฐ€ 2๋ฐฐ๋กœ ์ฆ๊ฐ€ํ•œ๋‹ค.
  • ๊ธฐ์กด ํ•ด์‹œ ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์š”์†Œ๋“ค์ด ๋‹ค์‹œ ์ƒˆ๋กœ์šด ๋ฒ„ํ‚ท์— ํ• ๋‹น๋œ๋‹ค.
  • ๋ฆฌํ•ด์‹ฑ์€ ์„ฑ๋Šฅ ๋น„์šฉ์ผ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ, ๋„ˆ๋ฌด ์ž์ฃผ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ์ ์ ˆํ•œ load factor ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

 

5. load factor์™€ ์„ฑ๋Šฅ ๊ฐ„์˜ ๊ด€๊ณ„

๋‚ฎ์€ load factor (์˜ˆ : 0.5)

๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•˜์ง€๋งŒ, ํ•ด์‹œ ์ถฉ๋Œ์ด ์ ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ์˜ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋œ๋‹ค.

๋†’์€ load factor(์˜ˆ : 0.9)

๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•ด์‹œ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ ธ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค. ์ถฉ๋Œ์ด ๋งŽ์•„์ง€๋ฉด ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฒ„ํ‚ท์˜ ์ฒด์ธ ํƒ์ƒ‰(ํ˜น์€ ๊ธฐํƒ€ ์ถฉ๋Œ ํ•ด๊ฒฐ ๋งค์ปค๋‹ˆ์ฆ˜)์ด ๋” ๋งŽ์ด ๋ฐœ์ƒํ•œ๋‹ค.

 

์ผ๋ฐ˜์ ์œผ๋กœ ์ž๋ฐ”์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” 0.75๋Š” ์„ฑ๋Šฅ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์‚ฌ์ด์˜ ์ ์ ˆํ•œ ๊ท ํ˜•์ ์œผ๋กœ ์—ฌ๊ฒจ์ง„๋‹ค.

 

6. ๊ฒฐ๋ก 

  • load factor๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด ์–ผ๋งˆ๋‚˜ ์ฐจ๋ฉด ํฌ๊ธฐ๋ฅผ ํ™•์žฅํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์ค‘์š”ํ•œ ๋งค๊ฐœ ๋ณ€์ˆ˜์ด๋‹ค. 
  • HashSet๊ณผ HashMap์—์„œ ๊ธฐ๋ณธ load factor๋Š” 0.75์ด๋ฉฐ, ์ด๋Š” ์„ฑ๋Šฅ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ์‚ฌ์ด์—์„œ ์ตœ์ ํ™”๋œ ๊ฐ’์œผ๋กœ ๊ฐ„์ฃผ๋œ๋‹ค.
  • ๊ฐœ๋ฐœ์ž๋Š” HashSet์„ ์‚ฌ์šฉํ•  ๋•Œ ํ•„์š”์— ๋”ฐ๋ผ load factor์™€ ์ดˆ๊ธฐ ์šฉ๋Ÿ‰์„ ์กฐ์ ˆํ– ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋„ˆ๋ฌด ๋‚ฎ์€ load factor๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์ž‡์œผ๋ฉฐ, ๋„ˆ๋ฌด ๋†’์€ load facotr๋Š” ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด์ฒ˜๋Ÿผ load factor๋Š” ํ•ด์‹œ ํ…Œ์ด๋ธ”์˜ ์„ฑ๋Šฅ์„ ๊ฒฐ์ •ํ•˜๋Š” ์ค‘์š”ํ•œ ์š”์†Œ๋กœ, ์šฉ๋Ÿ‰๊ณผ ์ถฉ๋Œ ํ•ด๊ฒฐ์˜ ๊ท ํ˜•์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.