์ถ์ฒ
ChatGPT
Java 1.8 ์์ค์ฝ๋
HashSetdms ์๋ฐ ์ปฌ๋ ์ ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ ํด๋์ค ์ค ํ๋๋ก, ์งํฉ(Set) ์๋ฃ ๊ตฌ์กฐ๋ฅผ ๊ตฌํํ๋ค. HashSet์ ์ค๋ณต ์์๋ฅผ ํ์ฉํ์ง ์์ผ๋ฉฐ, ์์์ ์์๋ฅผ ์ ์งํ์ง ์๋๋ค. ๋ด๋ถ์ ์ผ๋ก HashSet์ HashMap์ ์ฌ์ฉํด ๊ตฌํ๋๋ค.
1. HashSet์ ๊ฐ์
- HashSet์ Set ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ฉฐ, ์ค๋ณต๋์ง ์์ ์์๋ฅผ ์ ์ฅํ๋ค.
- ๋ด๋ถ์ ์ผ๋ก HashMap์ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋.
- ์์๋ ํด์ ์ฝ๋์ ์ํด ๊ด๋ฆฌ๋๋ฉฐ, ๋น ๋ฅธ ๊ฒ์, ์ถ๊ฐ, ์ ๊ฑฐ๊ฐ ๊ฐ๋ฅํ๋ค.
- ์ฝ์ ๋ ์์๋ฅผ ๋ณด์ฅํ์ง ์์ผ๋ฉฐ, ์์๋ค์ ๋ฌด์์ ์์๋ก ์ ์ฅ๋๋ค.
2. HashSet์ ๋ด๋ถ ๊ตฌ์กฐ
- HashSet์ ์ค์ ๋ก HashMap ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
- HasgSet์ ๊ฐ ์์๋ HashMap์ ํค๋ก ์ ์ฅ๋๋ฉฐ, ํด๋น ํค์ ๊ฐ์ ์์(PRESENT)๋ก ์ค์ ๋๋ค.
private transient HashMap<E,Object> map;
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
public HashSet() {
map = new HashMap<>();
}
public boolean add(E e) {
return map.put(e, PRESENT) == null;
}
- ๊ด๋ จ ๊ธ -> [Java] transient ์์ฝ์ด
- ๊ด๋ จ ๊ธ -> [Java] ์ HashSet ๋ด๋ถ์์ ์ฌ์ฉ๋๋ HashMap์ transient ์์ฝ์ด๋ฅผ ์จ์ ์ ์ธ๋์๊น
3. HashSet์ ์ฃผ์ ๋ฉ์๋ ๋์
add(E e)
์์๋ฅผ HashSet์ ์ถ๊ฐํ๋ค. ๋ด๋ถ์ ์ผ๋ก HashMap์ put ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค. ์ถ๊ฐํ๋ ค๋ ์์๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋ ๊ธฐ์กด์ ํค ๊ฐ์ ๋ฎ์ด์ฐ์ง ์๊ณ , ์ถ๊ฐ๊ฐ ์คํจํ๋ฉฐ false๋ฅผ ๋ฐํํ๋ค.
์๋ฐ 1.8 HashSet ํด๋์ค ์์ค์ฝ๋
/**
* ์ง์ ๋ ์์๊ฐ ์์ง ์๋ ๊ฒฝ์ฐ ์ด set์ ์ถ๊ฐํฉ๋๋ค.
* ๋ ๊ณต์์ ์ผ๋ก๋, ์ด set์ e2๊ฐ ์๊ณ (e==null ? e2==null : e.equals(e2))์ธ ๊ฒฝ์ฐ
* ์ง์ ๋ e๋ฅผ ์ด set์ ์ถ๊ฐํฉ๋๋ค.
* ์ด ์ธํธ์ ์ด๋ฏธ ์์๊ฐ ์๋ ๊ฒฝ์ฐ ํธ์ถ์ ์ธํธ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ
* false๋ฅผ ๋ฐํํฉ๋๋ค.
*
* @param e ์ด ์ธํธ์ ์ถ๊ฐํ ์์
* @return true ์ด ์ธํธ์ ์ง์ ๋ ์์๊ฐ ์ด๋ฏธ ์๋ ๊ฒฝ์ฐ
*/
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
remove(Object o)
์์๋ฅผ HashSet์์ ์ ๊ฑฐํ๋ค. ๋ด๋ถ์ ์ผ๋ก HashMap์ remove ๋ฉ์๋๋ฅผ ํธ์ถํด, ํด๋น ํค-๊ฐ ์์ ์ ๊ฑฐํ๋ค.
์๋ฐ 1.8 HashSet ํด๋์ค ์์ค์ฝ๋
/**
* ์ง์ ๋ ์์๊ฐ ์์ผ๋ฉด ์ด ์ธํธ์์ ์ ๊ฑฐํฉ๋๋ค.
* ๋ ๊ณต์์ ์ผ๋ก๋ (o==null ? e==null : o.equals(e))์ธ ์์ e๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
* ์ด ์ธํธ์ ํด๋น ์์๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด true๋ฅผ ๋ฐํํฉ๋๋ค
* (๋๋ ๋๋ฑํ๊ฒ ์ด ์ธํธ๊ฐ ํธ์ถ์ ๊ฒฐ๊ณผ๋ก ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ).
* (ํธ์ถ์ด ๋ฐํ๋๋ฉด ์ด ์ธํธ๋ ์์๋ฅผ ํฌํจํ์ง ์์ต๋๋ค.)
*
* ๋งค๊ฐ๋ณ์:o – ์ด ์ธํธ์์ ์ ๊ฑฐํ ๊ฐ์ฒด(์๋ ๊ฒฝ์ฐ)
* ๋ฐํ๊ฐ:์ธํธ์ ์ง์ ๋ ์์๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด true
*/
public boolean remove(Object o) {
return map.remove(o)==PRESENT;
}
contains(Object 0)
ํน์ ์์๊ฐ HashSet์ ์กด์ฌํ๋์ง ํ์ธํ๋ค. ๋ด๋ถ์ ์ผ๋ก HashMap์ containsKey ๋ฉ์๋๋ฅผ ํธ์ถํด, ํค์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
์๋ฐ 1.8 HashSet ํด๋์ค ์์ค์ฝ๋
/**
* ์ด ์ธํธ์ ์ง์ ๋ ์์๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด true๋ฅผ ๋ฐํํฉ๋๋ค.
* ๋ ๊ณต์์ ์ผ๋ก ๋งํ๋ฉด, ์ด ์ธํธ์ (o==null ? e==null : o.equals(e))์ธ
* ์์ e๊ฐ ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ์๋ง true๋ฅผ ๋ฐํํฉ๋๋ค.
*
* ๋งค๊ฐ๋ณ์: o – ์ด ์ธํธ์ ์กด์ฌํ๋์ง ํ
์คํธํ ์์
* ๋ฐํ๊ฐ: ์ด ์ธํธ์ ์ง์ ๋ ์์๊ฐ ํฌํจ๋์ด ์์ผ๋ฉด true
*/
public boolean contains(Object o) {
return map.containsKey(o);
}
size()
HashSet์ ์ ์ฅ๋ ์์์ ๊ฐ์๋ฅผ ๋ฐํํ๋ค. ๋ด๋ถ์ ์ผ๋ก HashMap์ size ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
์๋ฐ 1.8 HashSet ํด๋์ค ์์ค์ฝ๋
/**
* ์ด ์ธํธ์ ์์ ์(์นด๋๋๋ฆฌํฐ)๋ฅผ ๋ฐํํฉ๋๋ค
*
* ๋ฐํ: ์ด ์ธํธ์ ์์ ์(์นด๋๋๋ฆฌํฐ)
*/
public int size() {
return map.size();
}
4. ํด์ ํจ์์ ํด์ ๋ฒํท
- HashSet์ ์์๋ฅผ ์ ์ฅํ ๋ ๊ฐ ์์์ hashCode() ๋ฉ์๋๋ฅผ ํธ์ถํด ํด์ ์ฝ๋๋ฅผ ๊ณ์ฐํ๋ค.
- ์ด ํด์ ์ฝ๋๋ HashMap์์ ์ฌ์ฉ๋๋ ํด์ ํจ์์ ์ํด ํน์ ๋ฒํท(bucket)์ ๋งคํ๋๋ค.
- ๋์ผํ ํด์ ์ฝ๋๋ฅผ ๊ฐ์ง ์์๋ค์ด ๋์ผํ ๋ฒํท์ ์ ์ฅ๋ ์ ์๋ค. ์ด ๊ฒฝ์ฐ HashSet์ equals() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์์๊ฐ ๋์ผํ์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
5. ์ถฉ๋ ํด๊ฒฐ
- ๋ง์ฝ ๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ๋์ผํ ํด์ ์ฝ๋๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ, ํด์ ์ถฉ๋์ด ๋ฐ์ํ๋ค. ์ด ๊ฒฝ์ฐ, HashMap์ ๋ด๋ถ์ ์ผ๋ก ํด๋น ๋ฒํท์ ์๋ ์์๋ค์ ๋งํฌ๋ ๋ฆฌ์คํธ๋ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๊ด๋ฆฌํด ์ถฉ๋์ ํด๊ฒฐํ๋ค.
- ์๋ฐ 8์ดํ์๋ ๋ฒํท์ ์์๊ฐ ์ผ์ ์ ์ด์์ด ๋๋ฉด ๋งํฌ๋ ๋ฆฌ์คํธ์์ ํธ๋ฆฌ๋ก ๋ณํ๋์ด ์ฑ๋ฅ์ ๊ฐ์ ํ๋ค.
6. ์ฑ๋ฅ
- HashSet์ ์ฃผ์ ์ฐ์ฐ(add, remove, contains)์ ํ๊ท ์ ์ผ๋ก O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค. ์ด๋ ํด์ ํจ์๋ฅผ ์ด์ฉํด ์ง์ ์ ์ธ ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ํ์ง๋ง ํด์ ์ถฉ๋์ด ๋ง์์ง๊ฑฐ๋ ํด์ ํจ์๊ฐ ์ ๋๋ก ๋ถํฌ๋์ง ์์ผ๋ฉด ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
7. ์ฅ๋จ์
์ฅ์
์ค๋ณต ์์๋ฅผ ํ์ฉํ์ง ์๊ณ , ๋น ๋ฅธ ๊ฒ์, ์ถ๊ฐ, ์ ๊ฑฐ ์ฐ์ฐ์ ์ ๊ณตํ๋ค.
๋จ์
์์๋ค์ ์์๋ฅผ ์ ์งํ์ง ์์ผ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด TreeSet๋ณด๋ค ๋ ๋ง์ ์ ์๋ค.
8. ์ถ์ฒ
- ์๋ฐ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ HashSet ๊ตฌํ์ ์๋ฐ ์ธ์ด ์์ฒด์ ๊ณต์์ ์ธ ์ฝ๋์ด๋ฉฐ, ์ด๋ฅผ ๋ถ์ํ ๋ด์ฉ์ ๋๋ค. ํด๋น ๊ตฌํ์ ์๋ฐ์ ๋ค์ํ ๋ฒ์ ์์ ์กฐ๊ธ์ฉ ์ฐจ์ด๊ฐ ์์ ์ ์์ง๋ง, ๊ธฐ๋ณธ์ ์ธ ๋์ ์๋ฆฌ๋ ๋์ผํฉ๋๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[OOP] ๋ฐํ์ ๋คํ์ฑ (0) | 2024.09.04 |
---|---|
[OOP] ๋์ ๋ฐ์ธ๋ฉ (0) | 2024.09.04 |
[Java] ์ HashSet ๋ด๋ถ์์ ์ฌ์ฉ๋๋ HashMap์ transient ์์ฝ์ด๋ฅผ ์จ์ ์ ์ธ๋์๊น (4) | 2024.09.04 |
[Java] transient ์์ฝ์ด (0) | 2024.09.04 |
[Java] Set๊ณผ Map์ ์ฐจ์ด์ (0) | 2024.09.03 |