HashSet
HashSet๊ณผ TreeSet์ ์ด๋ฆ ๊ทธ๋๋ก Set์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์๊ธฐ ๋๋ฌธ์ ์์๊ฐ ์๊ณ ์ค๋ณต์ ํ์ฉํ์ง ์๋๋ค.
์ผ๋ฐ์ ์ผ๋ก๋ HashSet์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ผ๋ฐ์ ์ด๋ค.
๋ํ, ์์๋ฅผ ์ ์งํ๋ ค๋ฉด LinkedHashSetํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
TreeSet์ ๋ฒ์ ๊ฒ์๊ณผ ์ ๋ ฌ์ ์ ๋ฆฌํ ์ปฌ๋ ์ ํด๋์ค์ด๋ค.
๊ทธ๋ ๊ธฐ์ HashSet๋ณด๋ค ๋ฐ์ดํฐ ์ถ๊ฐ๋ ์ญ์ ์ ์๊ฐ์ด ๋ ์์๋๋ค.
HashSet์ ์ฃผ์ ๋ฉ์๋
์์ฑ์
int initialCapacity๋ HashSet์ ์ด๊ธฐ ์ฉ๋์ ์ง์ ํด์ฃผ๋ ๊ฒ์ด๋ค.
float loadFactor์ ์ธ์ HashSet์ ์ฉ๋์ ๋๋ฐฐ ์ฆ๊ฐํ ์ง ์ง์ ํด์ฃผ๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด loadFactor์ 0.8์ ์ ๋ ฅํ๋ฉด HashSet์ ์ฉ๋์ด 80ํ๋ก ์ฐจ๋ฉด ์ฉ๋์ด ๋๋ฐฐ ์ฆ๊ฐํ๋ ๊ฒ์ด๋ค.
์ถ๊ฐ, ์ญ์
add(Object o)๋ ์ถ๊ฐ , remove(Object o)๋ ์ญ์ void clear()์ ๋ชจ๋ ์ญ์ ์ด๋ค.
addAll(Collection c)๋ ํฉ์งํฉ, removeAll(Collection c)๋ ์ฐจ์งํฉ, retainAll(Collection c)๋ ๊ต์งํฉ์ด๋ค.
๊ธฐํ
contains(Object o)๋ o๋ผ๋ ๊ฐ์ฒด๊ฐ Set์ ํฌํจ๋์ด ์๋์ง ํ์ธํ๋ค.
boolean containsAll(Collection c)๋ ์ปฌ๋ ์ ์ ๋ด๊ธด ์ฌ๋ฌ ๊ฐ์ง ๊ฐ์ฒด๊ฐ ๋ชจ๋ Set์ ํฌํจ๋์ด ์๋์ง ํ์ธํ๋ค.
Iterator์ ์ปฌ๋ ์ ์ ๊ทผ ์ธํฐํ์ด์ค๋ก ๊ฐ์ง๊ณ ์๋ค.
isEmpty()๋ ๋น์ด์๋์ง ํ์ธํ๋ค. int size()๋ ์ ์ฅ๋์ด์๋ ๊ฐ์๋ฅผ ๋ฐํํ๋ค.
Object[] toArray()๋ Set์ ์ ์ฅ๋์ด์๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ฒด ๋ฐฐ์ด๋ก ๋ฐํํ๋ค.
HashSet์ ํน์ง
HashSet์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๊ธฐ ์ ์ ๊ธฐ์กด์ ๊ฐ์ ๊ฐ์ฒด๊ฐ ์๋์ง ๋จผ์ ํ์ธํ๋ค. (์ค๋ณต X)
๊ฐ์ ๊ฐ์ฒด๊ฐ ์์ผ๋ฉด ์ ์ฅํ๊ณ , ์์ผ๋ฉด ์ ์ฅํ์ง ์๋๋ค.
๊ทธ๋ ๊ธฐ์ boolean add(Object o)๋ ์ ์ฅํ ๊ฐ์ฒด์ equals()์ hashCode()๋ฅผ ํธ์ถํ๋ค.
์๋ฅผ ๋ค์ด Person์ด๋ผ๋ ๊ฐ์ฒด๋ฅผ add(Person)์ ํตํด ์ ์ฅ์ ํ๋ค๋ฉด,
Person๊ฐ์ฒด์ equals()์ hashCode()๋ฅผ ํธ์ถํ๋ ๊ฒ์ด๋ค.
ํ์ง๋ง Person์๋ equals()์ hashCode()๊ฐ ์๋ค.
๊ทธ๋ ๊ธฐ์ ๋ชจ๋ ํด๋์ค์ ์ต๊ณ ์กฐ์์ธ Objectํด๋์ค์ equals()์ hashCode()๋ฅผ ํธ์ถํ๊ฒ ๋๋ค.
ํ์ง๋ง, equals()์ hashCode()๋ฅผ ์ค๋ฒ ๋ผ์ด๋ฉํ์ง ์์ผ๋ฉด HashSet์ ์ ๋๋ก ๋์ํ์ง ์์ ์๋ ์๋ค.
๊ทธ๋ ๊ธฐ์ equals()์ hashCode()๊ฐ ์ค๋ฒ ๋ผ์ด๋ฉ๋์ด ์์ด์ผ ํ๋ค.
์ด๋ ๊ฒ equals()๋ iv๋ฅผ ๋น๊ตํ๊ฒ ๋ฐ๊ฟ์ผ ํ๋ฉฐ, hashCode๋ return Object.hash()๋ฅผ ์ด์ฉํด์ ๋ณ๊ฒฝํด์ผ ํ๋ค.
์ดํด๊ฐ ์ ๋์ง ์๋๋ค๋ฉด ๋๋ณด๊ธฐ๋ฅผ ํ์ธํ๋ฉด ์ข ๋ ์ดํดํ๊ธฐ ํธํ๋ค.
์๋์ ์ฝ๋๋ euqals()์ hashCode()๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ์ง ์๊ณ , ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ๋ ์ฝ๋์ด๋ค.

์ด๋ ๊ฒ Person์ด๋ผ๋ ๊ฐ์ฒด๋ฅผ HashSet์ ๋ ๋ฒ ์ถ๊ฐํ๋๋ฐ, ๋งค๊ฐ๋ณ์๊ฐ ๋์ผํ๊ฒ ์ถ๊ฐํ๋ค.
๊ทธ๋ฆฌ๊ณ HashSet์ ์ถ๋ ฅํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.

์ด๋ ๊ฒ abc๋ ์ค๋ณต์ ํ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ๊ฑฐ๊ฐ ๋์์ง๋ง, Person๊ฐ์ฒด๋ฅผ ํตํด์ ์์ฑ๋ David:10์
์ค๋ณต์ด ์ ๊ฑฐ๋์ง ์๊ณ , ๋ ๋ฒ ์ถ๋ ฅ์ด ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ equals()์ hashCode()๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ์ง ์์ผ๋ฉด ๊ฐ์ ๋งค๊ฐ๋ณ์์ ๊ฐ์ฒด๋ฅผ ๊ณ์ ์ถ๊ฐํด๋,
๋ฌด์์ ๋น๊ตํด์ผ ํ๋์ง equals()์ hashCode()๊ฐ ์ค๋ฒ๋ผ์ด๋ฉ ๋์ด์์ง ์๊ธฐ ๋๋ฌธ์
์ค๋ฒ๋ผ์ด๋ฉ์ ํด์ฃผ์ด์ผ ํ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ class๋ฅผ ๋ง๋ค ๋๋ equals()์ hashCode()๋ฅผ ๊ฐ์ด ์ค๋ฒ๋ผ์ด๋ฉ ํด์ฃผ๋๊ฒ ์ผ๋ฐ์ ์ด๋ค.
TreeSet
TreeSet์ ์ด์ง ํ์ ํธ๋ฆฌ(binary search tree)๋ก ๊ตฌํ๋์ด ์์ผ๋ฉฐ, ๋ฒ์ ํ์๊ณผ ์ ๋ ฌ์ ์ ๋ฆฌํ๋ค.
์ด์ง ํธ๋ฆฌ๋ ๋ชจ๋ ๋ ธ๋๊ฐ ์ต๋ 2๊ฐ(0 ~ 2)์ ํ์ ๋ ธ๋๋ฅผ ๊ฐ๋๋ค.
๊ฐ ์์(node)๊ฐ ๋๋ฌด(tree) ํํ๋ก ์ฐ๊ฒฐ(LinkedList์ ๋ณํ)๋์ด ์์ด TreeSet์ด๋ค.
TreeNode์ ํด๋์ค๋ฅผ ํ์ธํ๋ฉด ์ ์ฅํ๋ ๊ฐ์ฒด(element)์ ์ค๋ฅธ์ชฝ ์ผ์ชฝ์ ์์ ๋ ธ๋๋ค์ ์ ์ฅํ๋ค.
์ฌ๊ธฐ์ TreeSet์ ์ด์ง ํ์ ํธ๋ฆฌ๋ก ๊ตฌํ๋์ด ์๋๋ฐ ์ด์ง ํ์ ํธ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ด์ง ํ์ ํธ๋ฆฌ (binary search tree)
์ด์ง ํ์ ํธ๋ฆฌ๋ ๋ถ๋ชจ๋ณด๋ค ์์ ๊ฐ์ ์ผ์ชฝ, ํฐ ๊ฐ์ ์ค๋ฅธ์ชฝ์ ์ ์ฅํ๋ค.
์ด์ง ํธ๋ฆฌ๋ 0 ~ 2๊ฐ์ ๋ ธ๋๋ค์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ์ด์ง ํธ๋ฆฌ๋ผ๊ณ ํ๊ณ ,
๊ทธ์ค์์๋ ๋ถ๋ชจ๋ณด๋ค ์์ ๊ฐ์ ์ผ์ชฝ, ํฐ ๊ฐ์ ์ค๋ฅธ์ชฝ์ ์ ์ฅํ๋ ํธ๋ฆฌ๋ฅผ ์ด์ง ํ์ ํธ๋ฆฌ๋ผ๊ณ ํ๋ ๊ฒ์ด๋ค.
์ฆ, ์ด์ง ํธ๋ฆฌ์ ํ ์ข ๋ฅ์ธ ๊ฒ์ด๋ค.
์ด์ง ํธ๋ฆฌ์๋ ๋ถ๋ชจ๋ณด๋ค ํฐ ๊ฐ์ด ์ค๋ฅธ์ชฝ ์์ ๊ฐ์ด ์ผ์ชฝ ์ด๋ฐ ์ ์ฝ์ ์๋ค.
๊ทธ๋ฅ ์์์ด ์ต๋ 2๊ฐ์ด๊ธฐ๋ง ํ๋ฉด ์ด์ง ํธ๋ฆฌ์ด๋ค.
์ด์ง ํ์ ํธ๋ฆฌ๋ ๊ฑฐ๊ธฐ์ ๋ถ๋ชจ๋ณด๋ค ์์ ๊ฐ ์ผ์ชฝ, ํฐ ๊ฐ์ ์ค๋ฅธ์ชฝ์ด๋ผ๋ ์ ์ฝ์ด ์ถ๊ฐ๋ ๊ฒ์ด๋ค.
์ด์ง ํ์ ํธ๋ฆฌ์ ๋จ์ ์ผ๋ก๋ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง์๋ก ์ถ๊ฐ, ์ญ์ ์ ์๊ฐ์ด ๋ ๊ฑธ๋ฆฐ๋ค๋ ์ ์ด๋ค.(๋น๊ต ํ์ ์ฆ๊ฐ)
TreeSet์ ์ฃผ์ ๋ฉ์๋
TreeSet์ ๋ฉ์๋๋ง ๋์ดํ ๊ฒ์ด๋ค.
( add(), size(), remove(), isEmpty() ๋ฑ.. Collection ์ธํฐํ์ด์ค์ ๋ฉ์๋๋ ์ ์ธํ๋ค. )
TreeSet์ ์์ฑ์ ์ค ๋งค๊ฐ๋ณ์ ํ์ ์ด Comparator๊ฐ ์๋ ๊ฑธ ํ์ธํ ์ ์๋ค.
TreeSet์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๋๋ง๋ค ์์ ๋ฐ์ดํฐ์ ๋น๊ต๋ฅผ ํ๋ฉด์ ์ ์ฅ์ ํ๋๋ฐ,
๊ทธ๋ฌํ ๋น๊ต ๊ธฐ์ค์ ์์ฑ์ TreeSet(Comparator comp)๋ฅผ ํตํด ์ง์ ํ ์ ์๋ค.