Map

๐Ÿ”— Map ย ย ย  ๐Ÿ”— LinkedHashMap ย ย ย  ๐Ÿ”— Doubly linked list ย ย ย  ๐Ÿ”— TreeMap ย ย ย  ๐Ÿ”— HashMap



Map


  • ๋Œ€์‘ ๊ด€๊ณ„๋ฅผ ์‰ฝ๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์ž๋ฃŒํ˜•

  • ํ‚ค(key)-๊ฐ’(value)์„ ํ•œ ์Œ์œผ๋กœ ๊ฐ–๋Š” ์ž๋ฃŒํ˜•

  • value์˜ ์ค‘๋ณต์€ ํ—ˆ์šฉ๋˜๋‚˜, key์˜ ์ค‘๋ณต์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Œ

  • ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š์Œ

    • LinkedHashMap : ์ž…๋ ฅ๋œ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ์ดํ„ฐ ์ €์žฅ

    • TreeHashMap : ์ž…๋ ฅ๋œ key์˜ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋ฐ์ดํ„ฐ ์ €์žฅ



HashMap


  • HashMap์˜ ์ œ๋„ค๋ฆญ์Šค๋Š” key, value ๋ชจ๋‘ String ์ž๋ฃŒํ˜•

  • put(K key, V value) : ํ•ญ๋ชฉ ์ถ”๊ฐ€

  • putAll(Map<? Extends K, ? Extends V> m) : ์–ด๋–ค map์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์„ ํ•ด๋‹น map์œผ๋กœ ๋ณต์‚ฌ

  • putIfAbsent(K key, V value) : ํ•ด๋‹น key์— ๊ฐ’์ด ์—†๊ฑฐ๋‚˜ null์ด๋ฉด์ฃผ์–ด์ง„ value๋ฅผ ์ €์žฅํ•˜๊ณ  null ๋ฐ˜ํ™˜, ๊ฐ’์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์ €์žฅ๋˜์–ด ์žˆ๋Š” value๊ฐ’์„ ๋ฐ˜ํ™˜

  • get(Object key) : key์— ํ•ด๋‹น๋˜๋Š” value ์–ป๊ธฐ

  • getOrDefault(Object key, V defaultValue) : key์— ํ•ด๋‹นํ•˜๋Š” value๊ฐ€ ์—†์„ ๋•Œ null์ด ๋ฆฌํ„ด๋˜๋Š”๋ฐ, ์ด ๋•Œ getOrDefault()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด null ๋Œ€์‹  default ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ์Œ

  • containsKey(Object key) : ํ•ด๋‹น key์˜ ์กด์žฌ ์—ฌ๋ถ€ true/false๋กœ ๋ฆฌํ„ด

  • containsValue(Object value) : ํ•ด๋‹น value์˜ ์กด์žฌ ์—ฌ๋ถ€ true/false๋กœ ๋ฆฌํ„ด

  • isEmpty() : ๋งต์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ, ์–ด๋– ํ•œ key-value ๊ฐ’๋„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์œผ๋ฉด true ๋ฆฌํ„ด

  • remove(Object key) : ๋งต์˜ ํ•ญ๋ชฉ ์‚ญ์ œ, value๊ฐ’ ๋ฆฌํ„ด

  • size() : ์š”์†Œ์˜ ๊ฐœ์ˆ˜ ๋ฆฌํ„ด

  • keySet() : ๋งต์˜ ๋ชจ๋“  key๋ฅผ ๋ฆฌํ„ด

  • clear() : ๋งต์˜ ๋ชจ๋“  ํ•ญ๋ชฉ ์‚ญ์ œ

  • replace(K key, V value) : ํ•ด๋‹น key์— ๋Œ€ํ•œ ๊ฐ’ ๋ณ€๊ฒฝ

  • replace(K key, V oldValue, V newValue) : key๊ฐ€ ํŠน์ • value์ผ ๋•Œ๋งŒ value ๊ฐ’ ๋ณ€๊ฒฝ



LinkedHashMap


  • public class LinkedHashmap<K, V> extends HashMap<K, V> implements Map<K, V>

  • HashMap๊ณผ ๋™์ผํ•˜๊ฒŒ ํ‚ค-๊ฐ’ ์Œ์„ ์š”์†Œ๋กœ ๊ฐ€์ง€๋ฉฐ, key์˜ ์ค‘๋ณต์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Œ

  • non-synchronized

  • HashMap๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ LinkedHashMap์€ ์ž…๋ ฅ๋œ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ

  • LinkedHashMap์˜ implementation์€ ์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(doubly-linked list)์™€ ๋งค์šฐ ๋น„์Šทํ•จ [before] - [key] - [value] - [after]

    • ์ด์ค‘์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ž€?

      • ๋‹จ์ˆœ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(linked list)์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์ด์ „ ๋…ธ๋“œ(previous)์™€ ๋‹ค์Œ ๋…ธ๋“œ(next)๋กœ ๊ตฌ์„ฑ

      • ๋…ธ๋“œ์™€ ๋…ธ๋“œ๊ฐ€ ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Œ

      • ๋‹ค์Œ ๋…ธ๋“œ์˜ ํƒ์ƒ‰๋งŒ ๊ฐ€๋Šฅํ•œ ๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์™€ ๋‹ค๋ฅด๊ฒŒ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋…ธ๋“œ ํƒ์ƒ‰๋ฐฉํ–ฅ์ด ์–‘์ชฝ(์•ž๋’ค)๋กœ ๊ฐ€๋Šฅํ•จ

      • ์ด์ „ ๋…ธ๋“œ๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ์‚ฌ์šฉํ•˜๊ณ , ๊ตฌํ˜„์ด ๋ณต์žกํ•ด์ง„๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Œ

  • containsValue(Object value) / entrySet() / keySet() / get(Object key) / removeEldestEntry(Map.Entry<K, V> eldest) / values()

  • LRU Cache ๊ตฌํ˜„ ๊ฐ€๋Šฅ



TreeMap


  • ์ด์ง„ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ Map ์ปฌ๋ ‰์…˜

  • ์ €์žฅ๊ณผ ๋™์‹œ์— key์˜ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ (๋ถ€๋ชจ ํ‚ค๊ฐ’๊ณผ ๋น„๊ตํ•ด ํ‚ค ๊ฐ’์ด ๋‚ฎ์€ ๊ฒƒ์€ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ์—, ๋†’์€ ๊ฒƒ์€ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ์— ์ €์žฅ)

  • ๋ฐ์ดํ„ฐ ์ €์žฅ ์‹œ ์ •๋ ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— HashMap๋ณด๋‹ค ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€์ง€๋งŒ, ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ Map์„ ์œ ์ง€ํ•˜๊ฑฐ๋‚˜ ์ •๋ ฌ๋œ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ด์•ผ ํ•˜๋Š” ๋ฒ”์œ„ ๊ฒ€์ƒ‰์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํšจ์œจ์ 

  • TreeMap์€ ์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์˜ ๋ฌธ์ œ์ ์„ ๋ณด์™„ํ•œ ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ(Red-Black Tree)๋กœ ์ด๋ฃจ์–ด์ง

    • ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ๋ž€?

      • ์ž๊ฐ€ ๊ท ํ˜• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ

      • ๊ฐ ๋…ธ๋“œ๋“ค์€ red ํ˜น์€ black์˜ ์ƒ‰์ƒ์„ ๊ฐ€์ง

      • ์ผ๋ฐ˜์ ์ธ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ํ˜„์žฌ ๋…ธ๋“œ๋ณด๋‹ค ๊ฐ’์ด ์ž‘์€ ๊ฒƒ์€ ์ž์‹ ์˜ ์™ผ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์—, ๊ฐ’์ด ํฐ ๊ฒƒ์€ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์— ๊ฐ€์ง > ํŠธ๋ฆฌ์˜ ๋†’์ด๋งŒํผ ์‹œ๊ฐ„ ํ•„์š” (O(log N)), ๊ท ํ˜•์ด ๋ฌด๋„ˆ์งˆ ๊ฒฝ์šฐ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(N) ๊นŒ์ง€ ์ฆ๊ฐ€ํ•  ์ˆ˜์žˆ์Œ

      • ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ๋Š” ๋ถ€๋ชจ ๋…ธ๋“œ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ๋Š” ์™ผ์ชฝ ์ž์‹์œผ๋กœ, ํฐ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋…ธ๋“œ๋Š” ์˜ค๋ฅธ์ชฝ ์ž์‹์œผ๋กœ ๋ฐฐ์น˜ > ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€/์‚ญ์ œ ์‹œ ๊ท ํ˜•์„ ๋งž์ถค, ๊ฒ€์ƒ‰/์‚ฝ์ž…/์‚ญ์ œ ์‹œ O(log N)์ด ๋ณด์žฅ๋จ

Categories:

Java