HashMap์ Map ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ก ํค(key)-๊ฐ(value) ์์ผ๋ก ๊ตฌ์ฑ๋ Entry ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ค. ๋ด๋ถ์ ์ผ๋ก ํด์ ํจ์๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์์น(๋ฒํท)๋ฅผ ๊ฒฐ์ ํ๋ค.
import java.util.HashMap;
HashMap<Integer, String> hashMap = new HashMap<>();
// ๋คํ์ฑ ์ ์ฉ
Map<Integer, String> map = new HashMap<>();
1๏ธโฃ ๋ฐ์ดํฐ ์ถ๊ฐ์ ( put(key, value) )
ํค์ hashCode()๋ก ํด์๊ฐ์ ๊ณ์ฐํ๋ค.
ํด์๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ํด๋น ํค๊ฐ ์ ์ฅ๋ ํด์ ๋ฒํท์ ๊ฒฐ์ ํ๋ค.
ํด๋น ๋ฒํท์ ์ด๋ฏธ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ, ์ ์ฅ๋ ํค์ equals()๋ก ์์ ํ ๊ฐ์ ๊ฐ์ฒด์ธ์ง ๋น๊ตํ๋ค.

์ด๋ฏธ์ง ์ถ์ฒ : https://en.wikipedia.org/wiki/Hash_collision
2๏ธโฃ ํด์ ์ถฉ๋(Collision)์ด ๋ฐ์ํ ๊ฒฝ์ฐ
โ๏ธ HashMap์ด ํค ์ค๋ณต์ ์ ๊ฑฐํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ
- ์ถ๊ฐํ๋ ค๋ ํค ๊ฐ์ฒด(ex. ์ฌ์ฉ์ ์ ์ ๊ฐ์ฒด)์
hashCode(),equals()๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ์ง ์์ ๊ฒฝ์ฐ ์์ ํ ๊ฐ์ ๊ฐ์ฒด์ฌ๋, ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด๋ก ํ๋จ๋์ด ์ค๋ณต์ด ํ์ฉ๋ ์ ์๋ค.
| ๋ฉ์๋ | ์ค๋ช |
|---|---|
put(K key, V value) | ํค-๊ฐ ์ ์ถ๊ฐ |
get(Object key) | ํค์ ํด๋นํ๋ ๊ฐ ๋ฐํ |
remove(Object key) | ํค-๊ฐ ์ ์ ๊ฑฐ |
clear() | ๋ชจ๋ ํค-๊ฐ ์ ์ ๊ฑฐ |
containsKey(Object key) | ํน์ ํค ์กด์ฌ ์ฌ๋ถ ํ์ธ |
containsValue(Object value) | ํน์ ๊ฐ ์กด์ฌ ์ฌ๋ถ ํ์ธ |
keySet() | ํค๋ฅผ Set ํํ๋ก ๋ฐํ |
entrySet() | ๋ชจ๋ ํค-๊ฐ ์์ Set ํํ๋ก ๋ฐํ |
values() | ๊ฐ์ Collection ํํ๋ก ๋ฐํ |
import java.util.HashSet;
HashSet<ํ์
> hashSet = new HashSet<>();
// ๋คํ์ฑ ์ ์ฉ
Set<ํ์
> set = new HashSet<>();
HashMap์ key์ null์ ํ์ฉํ๊ธฐ ๋๋ฌธ)private transient HashMap<E,Object> map; // ๋ฐฑ์
์ฉ HashMap
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object(); // ๋๋ฏธ ๊ฐ์ฒด
public HashSet() {
map = new HashMap<>();
}
HashSet ํด๋์ค๋ ๋ด๋ถ์ ์ผ๋ก HashMap์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค.HashSet์ ๋ด๋ถ ์ ์ฅ์๋ก ๋ฐฑ์
์ฉ HashMap์ ์ฌ์ฉํ๋ค.public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
HashSet.add(x)๋ ๋ด๋ถ์ ์ผ๋ก map.put(x, PRESENT)์ ๋์ผํ๊ฒ ๋์ํ๋ค.HashSet์ HashMap๊ณผ ๋์ผํ๊ฒ
hashCode(),equals()๋ฉ์๋๋ก ๊ฐ์ ์ค๋ณต์ ํ๋จํ๋ค.
| ๋ฉ์๋ | ์ค๋ช |
|---|---|
add(E e) | ์์๋ฅผ ์ถ๊ฐ. ์ด๋ฏธ ์กด์ฌํ๋ฉด ์ถ๊ฐ ์ ํจ, false ๋ฐํ |
remove(Object o) | ์์๋ฅผ ์ ๊ฑฐ. ์กด์ฌํ์ผ๋ฉด true, ์๋๋ฉด false ๋ฐํ |
contains(Object o) | ์์๊ฐ ํฌํจ๋์ด ์๋์ง ์ฌ๋ถ ํ์ธ |
size() | ํ์ฌ ์์ ๊ฐ์ ๋ฐํ |
clear() | ๋ชจ๋ ์์ ์ ๊ฑฐ |
isEmpty() | ๋น์ด ์๋์ง ์ฌ๋ถ ํ์ธ |
iterator() | ์์ ์ํ์ฉ ๋ฐ๋ณต์ ๋ฐํ. fail-fast ๋์ |
clone() | ์์ ๋ณต์ฌ๋ณธ ๋ฐํ (์์ ์์ฒด๋ ๋ณต์ฌํ์ง ์์) |
spliterator() | ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ถํ ๋ฐ๋ณต์ ์ ๊ณต (Java 8๋ถํฐ ์ง์) |
HashMap์ ํค-๊ฐ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ ์ ์ฅ์ด ํ์ํ ๋ ์ฌ์ฉํ๋ค.HashSet์ ๊ฐ์ ์ค๋ณต์ ์ ๊ฑฐํ ์งํฉ์ด ํ์ํ ๋ ์ฌ์ฉํ๋ค.