Map

ν‚€(Key)와 κ°’(Value)을 ν•˜λ‚˜μ˜ 쌍으둜 λ¬Άμ–΄ μ €μž₯ν•˜λŠ” 자료 ꡬ쑰둜, ν‚€λ₯Ό 톡해 값을 λΉ λ₯΄κ²Œ νƒμƒ‰ν•˜λŠ” 데 μ΅œμ ν™”λ˜μ–΄ μžˆλ‹€.

Map μΈν„°νŽ˜μ΄μŠ€ λ‹€μ΄μ–΄κ·Έλž¨

Map Interface

Map μΈν„°νŽ˜μ΄μŠ€λŠ” Listλ‚˜ Setκ³ΌλŠ” 달리 Collection μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받지 μ•ŠλŠ”λ‹€.

  • ν•˜λ‚˜μ˜ 쌍(pair)을 μ—”νŠΈλ¦¬(Entry)라고 λΆ€λ₯΄λ©°, Map은 이 Entry 객체듀을 관리

  • ν‚€(Key)λŠ” Map λ‚΄μ—μ„œ μœ μΌν•΄μ•Ό ν•˜λ©°(쀑볡 λΆˆκ°€), κ°’(Value)은 쀑볡 κ°€λŠ₯

  • Map μžμ²΄λŠ” 순회(iteration)λ₯Ό 직접 μ§€μ›ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ, ν‚€λ‚˜ κ°’μ˜ 집합을 얻어와 μˆœνšŒν•΄μ•Ό 함

    • keySet(): Map의 λͺ¨λ“  ν‚€λ₯Ό Set ν˜•νƒœλ‘œ λ°˜ν™˜

    • values(): Map의 λͺ¨λ“  값을 Collection ν˜•νƒœλ‘œ λ°˜ν™˜

    • entrySet(): Map의 λͺ¨λ“  Entry(ν‚€-κ°’ 쌍)λ₯Ό Set ν˜•νƒœλ‘œ λ°˜ν™˜

Map ν•˜μœ„ Class νŠΉμ§•

Class
Base Class
Base Interface
μˆœμ„œ 보μž₯
탐색 μ‹œκ°„

HashMap

AbstractMap

Map

X

O(1)

TreeMap

SortedMap

NavigableMap

O

O(log n)

LinkedHashMap

HashMap

Map

O

O(1)

HashMap

HashMap은 ν•΄μ‹œ ν…Œμ΄λΈ”(Hash Table) 자료ꡬ쑰λ₯Ό 기반으둜 κ΅¬ν˜„λ˜μ—ˆλ‹€.

  • λ‚΄λΆ€μ μœΌλ‘œ Entry 객체λ₯Ό μ €μž₯ν•˜λŠ” λ°°μ—΄(ν•΄μ‹œ 버킷)을 μ‚¬μš©

  • put(key, value) λ©”μ„œλ“œ 호좜 μ‹œ, key 객체의 hashCode() λ©”μ„œλ“œλ₯Ό 기반으둜 ν•΄μ‹œ κ°’ 계산

    • equals()와 hashCode() λ©”μ„œλ“œλ₯Ό μ˜¬λ°”λ₯΄κ²Œ μž¬μ •μ˜(override)ν•΄μ•Ό μ˜λ„λŒ€λ‘œ λ™μž‘

  • ν•΄μ‹œ 좩돌

    • Java 8 이전: μ—°κ²° 리슀트(Separate Chaining) λ°©μ‹μœΌλ‘œ 좩돌 처리

    • Java 8 이후: 좩돌이 μ‹¬ν•œ 경우, μ—°κ²° 리슀트λ₯Ό λ ˆλ“œ-λΈ”λž™ 트리(Red-Black Tree) ꡬ쑰둜 λ³€ν™˜ν•˜μ—¬ 데이터 관리

TreeMap

TreeMap은 Red-Black TreeλΌλŠ” 이진 검색 트리(Binary Search Tree)λ₯Ό 기반으둜 κ΅¬ν˜„λ˜μ—ˆλ‹€.

  • 데이터λ₯Ό μ €μž₯ν•  λ•Œ ν‚€(Key) 값을 κΈ°μ€€μœΌλ‘œ μžλ™ μ •λ ¬

  • κ°μ²΄λŠ” Comparable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„(μžμ—° μ •λ ¬)ν•˜κ±°λ‚˜, TreeMap 생성 μ‹œ Comparator κ΅¬ν˜„ ν•„μš”

LinkedHashMap

LinkedHashMap은 HashMap을 상속받아, ν•΄μ‹œ ν…Œμ΄λΈ”μ˜ μž₯점과 μ—°κ²° 리슀트의 μž₯점을 κ²°ν•©ν•œ μžλ£Œκ΅¬μ‘°λ‹€.

  • HashMapκ³Ό λ™μΌν•˜κ²Œ ν•΄μ‹œ ν…Œμ΄λΈ”μ„ 기반으둜 λ™μž‘

  • λ‚΄λΆ€μ—μ„œ μ–‘λ°©ν–₯ μ—°κ²° 리슀트λ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ¨λ“  Entryλ₯Ό μ—°κ²°ν•˜μ—¬ 데이터가 μ‚½μž…λœ μˆœμ„œλ₯Ό μœ μ§€

    • μ‚½μž…λœ μˆœμ„œ(Insertion Order)λŒ€λ‘œ 순회 κ°€λŠ₯

  • μƒμ„±μž μ˜΅μ…˜μ„ 톡해 졜근 μ ‘κ·Ό μˆœμ„œ(Access Order)둜 μˆœμ„œλ₯Ό μœ μ§€ν•˜λ„λ‘ μ„€μ • κ°€λŠ₯

    • LRU(Least Recently Used) μΊμ‹œ κ΅¬ν˜„μ— 유용

Last updated

Was this helpful?