Java์์ HashMap์ ํค-๊ฐ ์์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ ๊ตฌ์กฐ ์ค ํ๋์ด๋ค. ์๋๋ HashMap์ ํน์ง๋ค์ด๋ค.
ํค-๊ฐ ์
: HashMap์ ๋ฐ์ดํฐ๋ฅผ ํค์ ๊ฐ์ ์์ผ๋ก ์ ์ฅํ๋ค. ์ด๊ฒ์ ํน์ ํค๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ํค์ ๊ด๋ จ๋ ๊ฐ์ ๊ฒ์ํ๋๋ฐ ์ฌ์ฉ๋๋ค. ํค๋ ์ค๋ณต์ด ํ์ฉ๋์ง ์์ผ๋ฉฐ, ๊ฐ์ ์ค๋ณต์ ํ์ฉํ๋ค.
ํด์ ํ
์ด๋ธ
: HashMap์ ๋ด๋ถ์ ์ผ๋ก ํด์ ํ
์ด๋ธ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค. ํด์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ํค๋ฅผ ํด์ ์ฝ๋๋ก ๋ณํํ๊ณ , ํด๋น ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ํ๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ์ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋ค.
๊ฒ์ ๋ฐ ์ฝ์
์๋
: HashMap์ ๋งค์ฐ ๋น ๋ฅธ ๊ฒ์ ๋ฐ ์ฝ์
์๋๋ฅผ ์ ๊ณตํ๋ค. ํด์ ํจ์๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ํ๊ท ์ ์ผ๋ก ์์ ์๊ฐ(O(1)) ์ ๋ฐ์ดํฐ์ ์์ธ์ค ํ ์ ์๋ค.
์ค๋ณต๋ ํค ํ์ฉํ์ง ์์
: HashMap์ ์ค๋ณต๋ ํค๋ฅผ ํ์ฉํ์ง ์๋๋ค. ๋์ผํ ํค๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฒฝ์ฐ, ์๋ก์ด ๊ฐ์ ์ด์ ๊ฐ์ผ๋ก ๋์ฒด๋๋ค.
์์๊ฐ ์์
: HashMap์ ์์์ ์์๋ฅผ ์ ์งํ์ง ์๋๋ค. ๋ฐ๋ผ์ ์์๋ฅผ ์ ์ฅํ ์์๋ ํน์ ์์๋ก ์ ๋ ฌ๋์ง ์๋๋ค.
Null ํ์ฉ
: HashMap์ nullํค์ null๊ฐ์ ํ์ฉํ๋ค. ์ฆ, ํค ๋๋ ๊ฐ์ผ๋ก null์ ์ ์ฅํ ์ ์๋ค.
๋๊ธฐํ๋์ง ์์
: HashMap์ ์ค๋ ๋ ๊ฐ ๋๊ธฐํ๋ฅผ ์ฒ๋ฆฌํ์ง ์๋๋ค. ๋ฐ๋ผ์ ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ๋์์ ์์ ๋ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์ ์ฌ์ฉํด์ผ ํ ๊ฒฝ์ฐ ConcurrentHashMap ์ ๊ณ ๋ คํด์ผ ํ๋ค.
์ฑ๋ฅ๊ณผ ์ฌ์ฉ ์ฌ๋ก
: HashMap์ ๊ฒ์ ๋ฐ ์ฝ์
์ฐ์ฐ์ด ๋น ๋ฅด๋ฉฐ, ๋ง์ ์ฌ์ฉ ์ฌ๋ก์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์บ์ฑ, ์บ์๊ด๋ฆฌ, ๋ฃฉ์
ํ
์ด๋ธ ๋ฑ ๋ค์ํ ์์ฉ ํ๋ก๊ทธ๋จ์์ ํ์ฉ๋๋ค.
HashMap<String, String> h1 = new HashMap<String, String>( );
// ๊ธฐ๋ณธ capacity:16, load factor:0.75
HashMap<String, String> h2 = new HashMap<String, String>(20);
// capacity:20์ผ๋ก ์ค์
HashMap<String, String> h3 = new HashMap<String, String>(20, 0.8);
// capacity:20, load factor:0.8๋ก ์ค์
HashMap<String, String> h4 = new HashMap<String, String>(h1);
// ๋ค๋ฅธ Map(h1)์ ๋ฐ์ดํฐ๋ก ์ด๊ธฐํ
V put(K key, V value)
// key์ value๋ฅผ ์ ์ฅํฉ๋๋ค.
void putAll(Map<? extends K, ? extends V> m)
// Map m์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ถ ์ ์ฅํฉ๋๋ค.
V putIfAbsent(K key, V value)
// ๊ธฐ์กด ๋ฐ์ดํฐ์ key๊ฐ ์์ผ๋ฉด key์ value๋ฅผ ์ ์ฅํฉ๋๋ค.
void clear( )
// ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํฉ๋๋ค.
V remove(Object key)
//key์ ์ผ์นํ๋ ๊ธฐ์กด ๋ฐ์ดํฐ( key์ value)๋ฅผ ์ญ์ ํฉ๋๋ค.
boolean remove(Object key, Object value)
//key์ value๊ฐ ๋์์ ์ผ์นํ๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํฉ๋๋ค.
V replace(K key, V value)
// key์ ์ผ์นํ๋ ๊ธฐ์กด ๋ฐ์ดํฐ์ value๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
V replace(K key, V oldValue, V newValue)
// key์ oldValue๊ฐ ๋์์ ์ผ์นํ๋ ๋ฐ์ดํฐ์ value๋ฅผ newValue๋ก ๋ณ๊ฒฝํฉ๋๋ค.
boolean containsKey(Object key)
// key์ ์ผ์นํ๋ ๋ฐ์ดํฐ๊ฐ ์๋์ง ์ฌ๋ถ๋ฅผ ๋ฐํํฉ๋๋ค. (์์ผ๋ฉด true)
boolean containsValue(Object value)
// value๊ฐ ์ผ์นํ๋ ๋ฐ์ดํฐ๊ฐ ์๋์ง ์ฌ๋ถ๋ฅผ ๋ฐํํฉ๋๋ค. (์์ผ๋ฉด true)
boolean isEmpty( )
// ๋ฐ์ดํฐ๊ฐ ๋น ์ํ์ธ์ง ์ฌ๋ถ๋ฅผ ๋ฐํํฉ๋๋ค. (๋น ์ํ๋ฉด true)
int size( )
//key-value ๋งตํ ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ๋ฐํํฉ๋๋ค.
V get(Object key)
// key์ ๋งตํ๋ value๊ฐ์ ๋ฐํํฉ๋๋ค.
V getOrDefault(Object key, V defaultValue)
// key์ ๋งตํ๋ value๊ฐ์ ๋ฐํํ๊ณ ์์ผ๋ฉด defaultValue๊ฐ์ ๋ฐํํฉ๋๋ค.
Set<Map.Entry<K, V>> entrySet( )
// ๋ชจ๋ key-value ๋งตํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง Set ๋ฐ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค.
Set<K> keySet( )
// ๋ชจ๋ key ๊ฐ์ ๊ฐ์ง Set ๋ฐ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค.
Collection<V> values( )
// ๋ชจ๋ value ๊ฐ์ ๊ฐ์ง Collection ๋ฐ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค.
public class HelloWorld {
public static void main(String[] args) {
HashMap<String, String> h1 = new HashMap<String, String>();
HashMap<String, String> h2 = new HashMap<String, String>();
h1.put("aaa", "1111");
h1.put("bbb", "2222");
h1.put("ccc", "3333");
h1.putIfAbsent("aaa", "0000");
h1.putIfAbsent("ddd", "4444");
h2.putAll(h1);
System.out.println("h1 : " + h1);
System.out.println("h2 : " + h2);
System.out.println("[1]: " + h1.containsKey("aaa"));
System.out.println("[2]: " + h1.containsValue("1111"));
System.out.println("[3]: " + h1.isEmpty());
System.out.println("[4]: " + h1.size());
System.out.println("[5]: " + h1);
System.out.println("[6]: " + h1.remove("aaa", "1111"));
System.out.println("[7]: " + h1.put("bbb", "0000"));
System.out.println("[8]: " + h1.replace("ccc", "0000"));
System.out.println("h1 : " + h1);
System.out.println("h2 : " + h2);
for (String key: h1.keySet()) {
String value = h1.get(key);
System.out.println("Key:" + key + ", Value:" + value);
}
}
}
h1 : {aaa=1111, ccc=3333, bbb=2222, ddd=4444}
h2 : {aaa=1111, ccc=3333, bbb=2222, ddd=4444}
[1]: true
[2]: true
[3]: false
[4]: 4
[5]: {aaa=1111, ccc=3333, bbb=2222, ddd=4444}
[6]: true
[7]: 2222
[8]: 3333
h1 : {ccc=0000, bbb=0000, ddd=4444}
h2 : {aaa=1111, ccc=3333, bbb=2222, ddd=4444}
Key:ccc, Value:0000
Key:bbb, Value:0000
Key:ddd, Value:4444