๊ตญ๋น์ง์ D+65
- ์๋ฐํ๋ก๊ทธ๋๋ฐ8 -
Set<E> ์ธํฐํ์ด์ค
- ์ํ์ ์งํฉ์ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
- ์์๊ฐ ์๋ค. (์์์ ๋ฌด์์)
- ์ค๋ณต์ด ์๋ค. (์์์ ์ ์ผ์ฑ)
• ๋์ผ๋ฐ์ดํฐ์ ํ๋จ
set์ธํฐํ์ด์ค๋ ์ค๋ณต์ด ์๋ ์ ์ผ์ฑ์ด๋ผ๋ ํน์ง์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ equals()์ hashCode()๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ์ ํตํด์ ํต์ผ๋ฐ์ดํฐ๋ฅผ ํ๋จํ๋ค.
์ฆ, ๋จผ์ ๋ฐ์ดํฐ์๋ํ hashCode๋ฅผ ๊ตฌํ๋ค์ equals๋ก ํด์ฌ๊ฐ์ ๋น๊ตํด ๋์ผ๋ฐ์ดํฐ๋ฅผ ํ๋จํ๋ค.
• hashCode์ ๋ฑ์ฅ๋ฐฐ๊ฒฝ
set์ธํฐํ์ด์ค๋ ์ ์ผ์ฑ์ ๋ง์กฑํด์ผํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ ๊ฒฝ์ฐ ๋ง์ฝ n๋ฒ์งธ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ๋ n-1๋ฒ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํด์ผ ํ๋ค.
์ ์ ์์ ๋ฐ์ดํฐ๊ฒฝ์ฐ ํฐ ๋ฌธ์ ๊ฐ ๋์ง๋ ์์ง๋ง ์๋ง์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ ์์ ๊ฒฝ์ฐ์ ์ค๋ฒํค๋๊ฐ ๋ฐ์๋ ์ ์๋ ๊ฒ์ด๋ค.
๋ํ, ๋ฐ์ดํฐ๊ฐ ์งง์ ๊ฒฝ์ฐ์ ๋จ์๊ฐ์ ๋น๊ตํด ๋์ผ๋ฐ์ดํฐ๋ฅผ ํ๋จํ ์ ์์ง๋ง ๊ฐ๊ฐ์ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ํด ๊ฒฝ์ฐ์ ๋น๊ต๋ฃจํด ์์ฒด์ ๋ํ ์ค๋ฒํค๋๊ฐ ๋ฐ์๋ ์ ์๋ค.
์ด๋ ๊ฒ ๋น๊ตํ์์ ๋ฐ์ดํฐ์ ๋น๊ต์ ๋ํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฒ์ด hashCode์ด๋ค.
๋จผ์ ๋น๊ตํ์์ ๊ด๋ จ๋ ๋ฌธ์ ์ ์ ๋ถ๋ฅ๋ฅผ ํตํด์ ๋น๊ตํ์๋ฅผ ์ค์ผ์ ์๋๋ฐ hashCode์ ๊ตฌํ๋ถ์ ๋ชจ๋๋ฌ์ฐ์ฐ์ด๋ผ๊ณ ๋ถ๋ฆฌ๋ ๋๋จธ์ง์ฐ์ฐ์ ํตํด ๋๋๋ ๊ฐ๋งํผ ๋ถ๋ฅํ๊ฒ ๋๋ฉด ํ์์ ์๋๊ฐ ๋นจ๋ผ์ง๊ธฐ ๋๋ฌธ์ ์กด์ฌ์ ์ ๋ฌด ํ์ธ์ด ๋งค์ฐ ๋น ๋ฅด๋ค.
๋ํ ๋ฐ์ดํฐ์ ๋น๊ต๋ ํด์ฌ์๊ณ ๋ฆฌ์ฆ์ ํตํด์ ๊ฐ๊ฐ์ ๋ค๋ฅธ ํฌ๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ๊ฐ(ํด์ฌ๊ฐ)์ผ๋ก ์ค์ ํด์ค ๋ค์ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํด ์ฃผ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ค.
(์์ธํ ์ ๋ณด๋ ์๋์ ์ค๋ช ํ๋ ํด์ฌ์ ๊ฐ๋ ์ ๋ํด ์ฐธ๊ณ ํ ๊ฒ)
์ด๋ฅผ ํตํด ์ ์ ์๋ ๊ฒ์ ๋ชจ๋๋ฌ ์ฐ์ฐ์์ ๋๋๋ ๊ฐ์ด ํด ๊ฒฝ์ฐ ๋๋๋ ๊ฐ์ ๊ฐ์๋งํผ ๋ฐ๊ตฌ๋๊ฐ ์๊ธฐ๊ฒ ๋๋๋ฐ ๋ง์ฝ ๋ฐ์ดํฐ์ ๊ฐ์๋งํผ ๋ฐ๊ตฌ๋๋ฅผ ๋ง๋ค๊ฒ ๋๋ฉด ์ด๋ ๊ฐ ๋ฐ๊ตฌ๋๋ง๋ค ์ ๋ํฌํ ๊ฐ์ ๊ฐ์ง๊ธฐ์ hashCode๋ Hash๊ฐ ์๋๊น ํ๋ ์๊ฐ์ ๊ฐ์ง ์ ์๋ค.
ํ์ง๋ง ์ง๊ธ ์ฐ๋ฆฌ๊ฐ ๊ตฌํํ๊ณ ์๋ hashCode๋ ๊ฒ์์๋๋ฅผ ์ค์ด๊ธฐ์ํด ๋ฐ๊ตฌ๋ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฅํด์ฃผ๋ ๊ฒ์ผ๋ก ์๋ฒฝํ Hash๋ผ๊ณ ๋ณด๊ธฐ์ ์ด๋ ต๋ค.
์ฆ, ์๋ฒฝํ Hash๋ผ๊ณ ๋ณด๊ธฐ๋ ์ด๋ ต์ง๋ง ๋๋๋ ๊ฐ์ ํฌ๊ฒ ์ค์ ํด์ค ๊ฒฝ์ฐ์ Hash์ ์ ๋ํฌํ ์ฑ๊ฒฉ์ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์ hashCode๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง๊ฒ ๋๋ ๊ฒ์ด๋ค.
ํด์ฌ
์์์ ๊ธธ์ด๋ฅผ ๊ฐ์ง ๋นํธ์ด์ ์ ๋ ฅ๋ฐ์์ ๊ณ ์ ๋ ํฌ๊ธฐ์ ์ ๋ํฌํ ๋นํธ์ด์ ๋ง๋ค์ด๋ด๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
• Hash Algorithm
ํด์ฌ๋ ์์์ ๋ค๋ฅธ ๋๊ฐ์ ๋ฐ์ดํฐ๊ฐ Hash Algorithm์ ๋ค์ด๊ฐ๊ฒ ๋ ๊ฒฝ์ฐ, ๊ณ ์ ๋ ๊ธธ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ณด๋ด๊ฒ ๋๋๋ฐ ์ด๋ ๊ฐ๊ฐ์ ํด์ฌ๊ฐ์ ์ ๋ํฌํ ๊ฐ์ ๊ฐ์ง๋ค.
๋ํ Hash Algorithm์ ๋ค์ด๊ฐ๊ธฐ ์ ์ ๋ ๋ฐ์ดํฐ๊ฐ ๋น์ทํ ๊ฐ์ ๊ฐ์ง๊ณ ์์์์ง๋ผ๋ ํด์ฌ์๊ณ ๋ฆฌ์ฆ์ ํตํด ๋์จ ํด์ฌ๊ฐ์ ์์ ๋ค๋ฅธ ๋นํธ์ด์ ๋ด๋ณด๋ด๊ฒ ๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Hash Algorithm์ ํต๊ณผํ ๋นํธ์ด์ ๊ณ ์ ๋ ๋นํธ์ด๊ณผ ์ ๋ํฌํ ๊ฐ์ ๋ด๋ณด๋ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ ๋ ํธ๋ฆฌํ๋ค.
• Hash ํน์ง
- ์ญ์์ ํญ์ฑ : ํด์๊ฐ์ด ์ฃผ์ด์ก์ ๋, ๊ทธ ํด์ ๊ฐ์ ์์ฑํ๋ ์ ๋ ฅ๊ฐ์ ์์๋ด๊ธฐ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
- ์ 2 ์ญ์ ์ ํญ์ฑ : ์ด๋ค ์ ๋ ฅ๊ฐ๊ณผ ๋์ผํ ํด์๊ฐ์ ๊ฐ์ง๋ ๋ค๋ฅธ ์ ๋ ฅ๊ฐ์ ์ฐพ์ ์ ์๋ค. (ํด์ ๊ฐ์ ์๊ณ ์์ ๋ ์๋ ๊ฐ์ ์ฐพ์๋ด๋ ๊ฒ์ด ๋ฌธ์ ์ด๋ค)
- ์ถฉ๋ ์ ํญ์ฑ : ํด์๊ฐ์ด ๊ฐ์ ์ ๋ ฅ ๊ฐ ๋ ๊ฐ๋ฅผ ์ฐพ์ ์ ์๋ค. (ํด์ ๊ฐ์ด ๋ฌด์์ด๋ ๊ทธ ๊ฐ์ ์๋ ๋ชจ๋ฅด๋ ํน์ ํ๊ฒ ๊ฐ์ ํด์ ๊ฐ์ ์์ฑํ๋ ๊ฐ ๋ ๊ฐ๋ฅผ ์ฐพ๋ ๊ณผ์ ์ด ๋ฌธ์ ์ด๋ค)
TreeSet<E> ์ธํฐํ์ด์ค
- Set์ ๊ธฐ๋ณธ์ ์ธ ์ฑ๊ฒฉ์ ๊ฐ์ง๊ณ ์๋ค.
- ํธ๋ฆฌ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฌ์ํ๋ฅผ ์ ์งํ๋ฉด์ ์ ์ฅํ๋ ์ธํฐํ์ด์ค ์ด๋ค. (๋จ์ํ ๋ค์ด๊ฐ๊ฒ์ผ๋ก ์ ๋ ฌ์ ๋ํ ๊ธฐ์ค์ด ์๋ ์ํ)
- ์ ๋ ฌ์ํ๋ฅผ ๋ง๋ค๊ธฐ ์ํด ์ ์ฅ๋๋ ํด๋์ค๋ comparable<T> ์ธํฐํ์ด์ค๋ฅผ implementํด์ผํ๋ค.
- ๋ณ๋์ ์ ๋ ฌ๊ธฐ์ค์ ์ ์ํ๊ธฐ ์ํด์๋ comparator<T> ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค.
• ์ฅ๋จ์
- ์ฅ์ : ๊ฒ์์ด ๋น ๋ฅด๋ค.
- ๋จ์ : ์ ๋ ฌ๊ธฐ์ค์ ๋ง๊ฒ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ๋๋ฌธ์ ์ ๋ ฅ์ด ๋๋ฆฌ๋ค.
• ์ ๋ ฌ๊ธฐ์ค์ ๋ฐ๊พธ๊ณ ์ถ์ ๊ฒฝ์ฐ
TreeSet์ ๋ํ ์ ๋ ฌ๊ธฐ์ค์ ๋ง๋ค๊ณ ์ถ์ ๊ฒฝ์ฐ Comparator๋ฅผ ๊ตฌํํ๋ ๋ณ๋์ Class๋ฅผ ์์ฑํด์ผํ๋ฉฐ, TreeSet์ ์์ฑํ ๊ฒฝ์ฐ TreeSet์ ์์ฑ์ ์์ ์ ๋ ฌ๊ธฐ์ค์ ๋ํ ๊ฐ์ฒด๋ฅผ ์์ฑํด ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
๋๊ธ