์ถ์ฒ
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๋ ํด์ ํ ์ด๋ธ์ ์ฑ๋ฅ์ ๊ฒฐ์ ํ๋ ์ค์ํ ์์๋ก, ์ฉ๋๊ณผ ์ถฉ๋ ํด๊ฒฐ์ ๊ท ํ์ ์ ์งํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] Map์์๋ Collection View๋ฅผ ์ฌ์ฉํ๋ค. (0) | 2024.09.11 |
---|---|
[Java] LinkedList ๊ตฌํ (1) | 2024.09.10 |
[Java] TreeSet ๊ตฌํ (1) | 2024.09.10 |
[์๋ฃ ๊ตฌ์กฐ] ๋ ๋-๋ธ๋ ํธ๋ฆฌ Red-Black Tree (1) | 2024.09.09 |
[์๋ฃ ๊ตฌ์กฐ] ์๊ฐ ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ Self-Balancing Binary Search Tree (0) | 2024.09.09 |