Java - HashMap

๋ฏผ์ฐฌํ™ยท2023๋…„ 10์›” 29์ผ

Java

๋ชฉ๋ก ๋ณด๊ธฐ
28/31
post-thumbnail

๐Ÿงฉ HashMap

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
profile
๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋ฅผ ๊ฟˆ๊ฟ‰๋‹ˆ๋‹ค

0๊ฐœ์˜ ๋Œ“๊ธ€