
HashMap

HashMap์ Map์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค์ด๋ค.
Map์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ธฐ์ ์์๋ ์๊ณ , ์ค๋ณต์ ํค๋ ํ์ฉํ์ง ์์ง๋ง ๊ฐ์ ํ์ฉํ๋ค. → ํค X, ๊ฐ O
๋ฐ์ดํฐ๋ฅผ ํค์ ๊ฐ์ ์์ผ๋ก ์ ์ฅ์ ํ๋ ๊ฒ์ด ํน์ง์ด๋ค.
Hashtable์ ์๋ ๋ฒ์ ์ด๊ณ , HashMap์ ์ ๋ฒ์ ์ด๋ค.
๋ ์ฐจ์ด์ ์ Hashtable์ ๋๊ธฐํ๊ฐ ๋์ด์๊ณ , HashMap์ ๋๊ธฐํ๊ฐ ๋์ด์์ง ์์ ๊ฒ์ด ์ฐจ์ด์ด๋ค.
TreeMap์ TreeSet๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค. TreeSet์ ๋ํด์๋ ๋ค์ ๋๋ณด๊ธฐ๋ฅผ ํ์ธํ๋ฉด ๋๋ค.
[Java] ์ปฌ๋ ์ ํ๋ ์์ (5) - HashSet, TreeSet
HashSet HashSet๊ณผ TreeSet์ ์ด๋ฆ ๊ทธ๋๋ก Set์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์๊ธฐ ๋๋ฌธ์ ์์๊ฐ ์๊ณ ์ค๋ณต์ ํ์ฉํ์ง ์๋๋ค. ์ผ๋ฐ์ ์ผ๋ก๋ HashSet์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ผ๋ฐ์ ์ด๋ค. ๋ํ, ์์๋ฅผ ์ ์งํ๋ ค๋ฉด Li
pids.tistory.com
TreeMap์ TreeSet๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฒ์ ๊ฒ์๊ณผ ์ ๋ ฌ์ ์ ๋ฆฌํ ์ปฌ๋ ์ ํด๋์ค์ด๋ค.
๋ฌผ๋ก HashMap๋ณด๋ค ๋ฐ์ดํฐ ์ถ๊ฐ, ์ญ์ ์ ์๊ฐ์ด ๋ ์ค๋ ๊ฑธ๋ฆฐ๋ค. (๋น๊ต ์ ์ฅ)
๋ง์ฝ ์์๋ฅผ ์ ์งํด์ผ ํ๋ HashMap์ ์ฌ์ฉํ๋ค๋ฉด LinkedHashMapํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ด๋ ๊ฒ Map์ธํฐํ์ด์ค ์ค ๊ตฌํํ ๋ํ์ ์ธ ์ปฌ๋ ์ ํด๋์ค๋ HashMap์ด๋ผ๊ณ ํ ์ ์๋ค.
HashMap์ ํค(key)์ ๊ฐ(value)
HashMap์ ํด์ฑ(hashing) ๊ธฐ๋ฒ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ๊ทธ๋ ๊ธฐ์ ๋ฐ์ดํฐ๊ฐ ๋ง์๋ ๊ฒ์์ด ๋น ๋ฅด๋ค.
ํด๋์ค ์ด๋ฆ์ Hash๊ฐ ๋ค์ด๊ฐ ํด๋์ค๋ ๋ชจ๋ ํด์ฑ(hashing) ๊ธฐ๋ฒ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค๋ ๋ป์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ํด์ฑ(hashing) ๊ธฐ๋ฒ์ ๋ฌด์์ผ๊น?
ํด์ฑ์ ๋ํ ์์๋ฅผ ๋จผ์ ๋ค์ด์ ์ค๋ช ์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
์ด๋ค ๋ณ์์ ๊ฐํธ์ฌ๊ฐ ํ์์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ธด ์๋ฅ๋ค์ ์ ๋ฆฌํ๋ ค๊ณ ํ ๋,
๋ง์ฝ ์ฐ๋๋ณ๋ก ์๋์ ์ ๋ฆฌ๋ฅผ ํ๋ค๊ณ ๊ฐ์ ํ๋ฉด,
๋ง์ฝ ๋ค๋ฅธ ๊ฐํธ์ฌ๊ฐ ํ์์ ๋ณด๋ฅผ ์ฐพ์๋ฌ๋ผ๊ณ ์ฃผ๋ฏผ๋ฒํธ๋ฅผ ๋งํ๋ฉด,
๊ฐํธ์ฌ๋ ๊ณง๋ฐ๋ก 70๋ ๋ ์๋ฅ๋ฅผ ๋ถ๋ฆฌํด๋์ ์๋์์ ์๋ฅ๋ฅผ ์ฐพ์ ์ ์๋ค.
ํด์ ํจ์(hash function)๊ฐ ํ๋ ์ผ์ ์ ์ํฉ๊ณผ ๋์ผํ๋ค๊ณ ๋ณผ ์ ์๋ค.

ํด์ํจ์์ ์ด๋ค ํค(key)๋ฅผ ๋ฃ๊ฒ ๋๋ฉด ํด๋น ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด์๋ index๋ฅผ ๋ฐํํ๋ค.
ํด์ํจ์(hash function)๋ก ํด์ ํ ์ด๋ธ(hash table)์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ, ๊ฒ์ํ๋ ๊ธฐ๋ฒ์ด๋ค.

์ ์์๋ฅผ ํ๋ก๊ทธ๋๋ฐ ์๊ฐ์ผ๋ก ๋ฐ๋ผ๋ณด๋ฉด ์ ์ด๋ฏธ์ง์ ๊ฐ๋ค.
์ ์ด๋ฏธ์ง์์ ํด์ ์ฝ๋๋ ๋ฐฐ์ด์ index์ ๊ฐ์ ์๋ฏธ์ด๋ค.
์ฆ, ์ฐพ๊ณ ์ ํ๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ฐฐ์ด์ index๋ฅผ ๋ฐํํ๋ ๊ฒ์ด๋ค.
์ฌ๊ธฐ์ ํด์ ํ ์ด๋ธ์ ๋ฐฐ์ด๊ณผ ๋งํฌ๋ ๋ฆฌ์คํธ๊ฐ ์กฐํฉ๋ ํํ์ด๋ค.

์ ํด์ ํ ์ด๋ธ์ ์ด๋ฏธ์ง๋ฅผ ๋ณด๋ฉด ๋ฐฐ์ด์ด ์ ์ผ ์ฒ์ ์๊ณ ๊ฐ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ค์ ๋ค๋ฅธ ๊ฐ๋ค๊ณผ ์ฐ๊ฒฐ๋์ด์๋ค.
๊ทธ๋ ๊ธฐ์ ๋ฐฐ์ด๊ณผ ๋งํฌ๋ ๋ฆฌ์คํธ๊ฐ ์กฐํฉ๋ ํํ๋ผ๊ณ ํ๋ ๊ฒ์ด๋ค.
๋ฐฐ์ด์ ์ ๊ทผ์ฑ์ด ์ข๋ค๋ ์ฅ์ ๊ณผ, ๋งํฌ๋ ๋ฆฌ์คํธ์ ๋ณ๊ฒฝ์ ์ ๋ฆฌํ๋ค๋ ์ฅ์ ์ ์์ ๊ฒ์ด๋ค.
ํด์ ํ ์ด๋ธ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ณผ์
โ ํค๋ก ํด์ํจ์๋ฅผ ํธ์ถํด์ ํด์ ์ฝ๋๋ฅผ ์ป๋๋ค.
โ ํด์ ์ฝ๋(ํด์ํจ์์ ๋ฐํ ๊ฐ)์ ๋์ํ๋ ๋งํฌ๋ ๋ฆฌ์คํธ๋ฅผ ๋ฐฐ์ด์์ ์ฐพ๋๋ค.
โ ๋งํฌ๋ ๋ฆฌ์คํธ์์ ํค์ ์ผ์นํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋๋ค.
โป ํด์ํจ์๋ ๊ฐ์ ํค์ ๋ํด ํญ์ ๊ฐ์ ํด์ ์ฝ๋๋ฅผ ๋ฐํํด์ผ ํ๋ค.
โป ์๋ก ๋ค๋ฅธ ํค์ผ์ง๋ผ๋ ๊ฐ์ ๊ฐ์ ํด์์ฝ๋๋ฅผ ๋ฐํํ ์๋ ์๋ค.
์ด๋ ๊ฒ ํด์ฑ ๊ธฐ๋ฒ์ ํตํด ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ํค์ ๊ฐ์ผ๋ก ๋ถ๋ฅ๊ฐ ๋๋ค.

์ฌ๊ธฐ์ ํค๋ ์ค๋ณต์ ํ์ฉํ์ง ์๊ณ , ๊ฐ์ ์ค๋ณต์ ํ์ฉํ๋ค.

์ฌ๊ธฐ์ ๋ง์ด ํท๊ฐ๋ฆฌ๋ ๋ถ๋ถ์ด ์๋๋ฐ, ์ ์ฝ๋์ ๊ฐ์ด 3๊ฐ์ ํค์ ๊ฐ์ HashMap์ ์ถ๊ฐ(put)๋ฅผ ํ๋ฉด,
| ํค(key) | ๊ฐ(value) |
| myId | 1234 |
| asdf | 1234 |
์ด๋ ๊ฒ asdf๋ ๊ฐ์ด 1111์ด ์๋, 1234๋ก ์ ์ฅ์ด ๋๋ค.
์ฆ, ๋๊ฐ์ ํค์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ์ ์ฅ์ ํ๋ฉด ์๋ก์ด ๊ฐ์ผ๋ก ๋ณ๊ฒฝ์ด ๋๋ค๋ ๋ป์ด๋ค.
HashMap์ ์ฃผ์ ๋ฉ์๋
| ์์ฑ์ / ๋ฉ์๋ | ์ค๋ช |
| HashMap() | HashMap๊ฐ์ฒด๋ฅผ ์์ฑ |
| HashMap(int initialCapacity) | ์ง์ ๋ ๊ฐ์ ์ด๊ธฐ์ฉ๋์ผ๋ก ํ๋ HashMap๊ฐ์ฒด๋ฅผ ์์ฑ |
| HashMap(int initialCapacity, float loadFactor) | ์ง์ ๋ ์ด๊ธฐ์ฉ๋๊ณผ load factor์ HashMap๊ฐ์ฒด๋ฅผ ์์ฑ |
| HashMap(Map m) | ์ง์ ๋ Map์ ๋ชจ๋ ์์๋ฅผ ํฌํจํ๋ HashMap์ ์์ฑ |
| void clear() | HashMap์ ์ ์ฅ๋ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐ |
| Object clone() | ํ์ฌ HashMap์ ๋ณต์ ํด์ ๋ฐํ |
| boolean containsKey(Object key) | HashMap์ ์ง์ ๋ ํค๊ฐ ํฌํจ๋์ด์๋์ง ํ์ธ. |
| boolean containsValue(Object value) | HashMap์ ์ง์ ๋ ๊ฐ์ด ํฌํจ๋์ด์๋์ง ํ์ธ |
| Set entrySet() | HashMap์ ์ ์ฅ๋ ํค์ ๊ฐ์ ์ํธ๋ฆฌ(ํค์ ๊ฐ์ ๊ฒฐํฉ)์ ํํ๋ก Set์ ์ ์ฅํด์ ๋ฐํ |
| Object get(Object key) | ์ง์ ๋ ํค์ ๊ฐ(๊ฐ์ฒด)์ ๋ฐํ. ๋ชป์ฐพ์ผ๋ฉด null ๋ฐํ |
| Object getOrDefault(Object key, Object defaultValue) | ์ง์ ๋ ํค์ ๊ฐ(๊ฐ์ฒด)์ ๋ฐํ. ๋ชป์ฐพ์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ(defaultValue) ์ผ๋ก ์ง์ ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํ |
| boolean isEmpty() | HashMap์ด ๋น์ด์๋์ง ํ์ธ |
| Set keySet() | HashMap์ ์ ์ฅ๋ ๋ชจ๋ ํค๊ฐ ์ ์ฅ๋ Set์ ๋ฐํ |
| Object put(Object key, Object value) | ์ง์ ๋ ํค์ ๊ฐ์ HashMap์ ์ ์ฅ |
| void putAll(Map m) | Map์ ์ ์ฅ๋ ๋ชจ๋ ์์๋ฅผ HashMap์ ์ ์ฅ |
| Object remove(Object key) | HashMap์์ ์ง์ ๋ ํค๋ก ์ ์ฅ๋ ๊ฐ(๊ฐ์ฒด)์ ์ ๊ฑฐ |
| Object replace(Object key, Object value) | ์ง์ ๋ ํค์ ๊ฐ์ ์ง์ ๋ ๊ฐ์ฒด(value)๋ก ๋์ฒด |
| boolean replace(Object key,Object oldValue,Object newValue) | ์ง์ ๋ ํค์ ๊ฐ์ฒด(oldValue)๊ฐ ๋ชจ๋ ์ผ์นํ๋ ๊ฒฝ์ฐ์๋ง ์๋ก์ด ๊ฐ์ฒด(newValue)๋ก ๋์ฒด |
| int size() | HashMap์ ์ ์ฅ๋ ์์์ ๊ฐ์๋ฅผ ๋ฐํ |
| Collection values() | HashMap์ ์ ์ฅ๋ ๋ชจ๋ ๊ฐ์ ์ปฌ๋ ์ ์ ํํ๋ก ๋ฐํ |
Collections
Collections๋ ์ปฌ๋ ์ ์ ์ํ ๋ฉ์๋(static)๋ฅผ ์ ๊ณตํ๋ค.
1. ์ปฌ๋ ์ ์ฑ์ฐ๊ธฐ, ๋ณต์ฌ, ์ ๋ ฌ, ๊ฒ์ - fill(), copy(), sort(), binarySearch() ๋ฑ
2. ์ปฌ๋ ์ ์ ๋๊ธฐํ - synchronizedXXX()

๋ฐฐ์ด ๊ธฐ๋ฐ ์ปฌ๋ ์ ์๋ Vector์ Arraylist๊ฐ ์๋ค.
๋์ ์ฐจ์ด์ ์ผ๋ก๋ Vector๋ ๋๊ธฐํ๊ฐ ๋์ด์๊ณ , ArrayList๋ ๋๊ธฐํ๊ฐ ๋์ด์์ง ์๋ค.
ํ์ง๋ง ArrayList๋ก ๋๊ธฐํ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด synchronized๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ด๋ ๊ฒ ArrayList ๊ฐ์ ๊ฒฝ์ฐ๋ ์ ํ์ ์ผ๋ก ๋๊ธฐํ ์ฌ๋ถ๋ฅผ ์ ํ ์ ์์ง๋ง, Vector๋ ํญ์ฌ ๋๊ธฐํ๊ฐ ๋์ด์๋ค.

์ฌ์ฉ๋ฒ์ ์ ์ฝ๋์ ๊ฐ์ด ์ฌ์ฉํ๋ฉด ๋๋ค.
Collections.synchronizedList()์ ๋๊ธฐํ๋์ด์์ง ์์ ArrayList()๋ฅผ ๋ฃ๊ฒ ๋๋ฉด ๋๊ธฐํ๋ syncList๊ฐ ์๊ธด๋ค.
๊ทธ๋ ๊ฒ ๋๊ธฐํ๋ syncList๋ Vector์ ๊ฐ์ List๋ผ๊ณ ๋ณผ ์ ์๋ค.
3. ๋ณ๊ฒฝ ๋ถ๊ฐ(readOnly) ์ปฌ๋ ์ ๋ง๋ค๊ธฐ - unmodifiableXXX()

unmodifiable์ ํตํด์ ๋ง๋ค์ด์ง ์ปฌ๋ ์ ์ ์์ ์ด ๋ถ๊ฐ๋ฅํ ์ฝ๊ธฐ ์ ์ฉ ์ปฌ๋ ์ ์ผ๋ก ๋ง๋ค์ด์ค๋ค.
์ปฌ๋ ์ ์ด ๋ณ๊ฒฝ๋์ง ์๊ฒ ๋ณดํธํ ๋, ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ฌ์ฉํ ๋ ์ฌ์ฉํ๋ ๋ฉ์๋์ด๋ค.
4. ์ฑ๊ธํค ์ปฌ๋ ์ ๋ง๋ค๊ธฐ - singletonXXX()

์ฑ๊ธํค ์ปฌ๋ ์ ์ ๊ฐ์ฒด๋ฅผ ํ ๊ฐ๋ง ์ ์ฅํ๋ ์ปฌ๋ ์ ์ ๋ง๋ค ๋ ์ฌ์ฉ๋๋ค.
5. ํ ์ข ๋ฅ์ ๊ฐ์ฒด๋ง ์ ์ฅํ๋ ์ปฌ๋ ์ ๋ง๋ค๊ธฐ - checkedXXX()

checked๋ ํ ๊ฐ์ง ํ์ ์ ๊ฐ์ฒด๋ง ์ ์ฅํ ๋ ์ฌ์ฉ๋๋ค.

์ ์ฝ๋์ ๊ฐ์ด ArrayList๋ฅผ ๋ง๋ค๊ณ checkedList๋ฅผ ํตํด list์ ํ์ ์ ์ ํด์ค๋ค.
๊ทธ๋ผ ์ ํด์ง ํ์ ์ ๊ฐ์ฒด๋ ์ถ๊ฐ๊ฐ ๊ฐ๋ฅํ์ง๋ง, ๊ทธ ์ธ์ ํ์ ์ ๋ฃ์ผ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์ฌ์ค checked๋ ์ง๋ค๋ฆญ์ค๊ฐ ๋์จ ์ดํ๋ก๋ ์ ์ฌ์ฉํ์ง ์๋๋ค.
๊ทธ๋ ๊ธฐ์ ์ด๋ค ์ญํ ์ ํ๋์ง ์ ๋๋ง ์์๋๋๋ก ํ์.
์ปฌ๋ ์ ํด๋์ค ์ ๋ฆฌ

'๐จ๏ธ Backend > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| Spring WebSocket๊ณผ STOMP, ๊ทธ๋ฆฌ๊ณ Kafka๋ฅผ ํ์ฉํ ์ค์๊ฐ ํต์ (3) | 2025.03.01 |
|---|---|
| Thymeleaf ํ ํ๋ฆฟ ์์ง (2) | 2024.10.20 |
| [Java] ์ปฌ๋ ์ ํ๋ ์์ (5) - HashSet, TreeSet (0) | 2022.12.13 |
| [Java]์ปฌ๋ ์ ํ๋ ์์ (4) - ์ปฌ๋ ์ ์ ๊ทผ ์ธํฐํ์ด์ค, Arrays, Comparator์ Comparable (0) | 2022.12.05 |
| [Java]์ปฌ๋ ์ ํ๋ ์์ (3) - Stack & Queue (0) | 2022.12.02 |