π™ˆπ™–π™₯ π˜Ύπ™€π™‘π™‘π™šπ™˜π™©π™žπ™€π™£ π˜Ύπ™‘π™–π™¨π™¨

uuuouuoΒ·2022λ…„ 7μ›” 19일
0
post-thumbnail

πŸ“– Map μ»¬λ ‰μ…˜ 클래슀


  • Map μΈν„°νŽ˜μ΄μŠ€λŠ” Collection μΈν„°νŽ˜μ΄μŠ€μ™€λŠ” λ‹€λ₯Έ μ €μž₯ 방식
  • 킀와 값을 ν•˜λ‚˜μ˜ 쌍으둜 μ €μž₯ν•˜λŠ” 방식(key-value 방식)을 μ‚¬μš©
    - ν‚€(key)λž€ μ‹€μ§ˆμ μΈ κ°’(value)을 μ°ΎκΈ° μœ„ν•œ μ΄λ¦„μ˜ μ—­ν• 

νŠΉμ§•

  1. μš”μ†Œμ˜ μ €μž₯ μˆœμ„œλ₯Ό μœ μ§€ν•˜μ§€ μ•ŠμŒ
  2. ν‚€λŠ” 쀑볡을 ν—ˆμš©ν•˜μ§€ μ•Šμ§€λ§Œ, κ°’μ˜ 쀑볡은 ν—ˆμš©

λŒ€ν‘œμ μΈ Map μ»¬λ ‰μ…˜ 클래슀

  1. HashMap<K, V>
  2. Hashtable<K, V>
  3. TreeMap<K, V>

πŸ’¬ HashMap<K, V> 클래슀


  • κ°€μž₯ 많이 μ‚¬μš©λ˜λŠ” 클래슀 쀑 ν•˜λ‚˜
  • JDK 1.2λΆ€ν„° 제곡된 HashMap ν΄λž˜μŠ€λŠ” ν•΄μ‹œ μ•Œκ³ λ¦¬μ¦˜(hash algorithm)을 μ‚¬μš©ν•˜μ—¬ 검색 속도가 맀우 빠름
  • Map μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λ―€λ‘œ, μ€‘λ³΅λœ ν‚€(key)λ‘œλŠ” 값을 μ €μž₯ν•  수 μ—†μŒ
  • ν•˜μ§€λ§Œ 같은 κ°’(value)을 λ‹€λ₯Έ ν‚€λ‘œ μ €μž₯ν•˜λŠ” 것은 κ°€λŠ₯
  • null ν—ˆμš©ν•¨
  • μ‹œκ°„λ³΅μž‘λ„
    • get : O(1)
    • containsKey : O(1)
    • next : O(h/n) hλŠ” ν…Œμ΄λΈ” μš©λŸ‰

β—Ύ HashMap<K, V>의 μ£Όμš” λ©”μ†Œλ“œ

λ©”μ†Œλ“œμ„€λͺ…
void clear()λͺ¨λ“  맡 제거
boolean containsKey(Object key)μ „λ‹¬λœ 객체(key) ν¬ν•¨ν•˜λŠ”μ§€ 확인
boolean containsValue(Object value)μ „λ‹¬λœ 객체(value) ν¬ν•¨ν•˜λŠ”μ§€ 확인
Set<Map.Entry<K,V>> entrySet()ν•΄λ‹Ή 맡에 ν¬ν•¨λœ λ§€ν•‘μ˜ 집합 λ°˜ν™˜
V get(Object key)μ „λ‹¬λœ 객체(key)의 κ°’(value) λ°˜ν™˜
boolean isEmpty()ν•΄λ‹Ή 맡이 λΉ„μ—ˆλŠ”μ§€ 확인
Set< K > keySet()ν•΄λ‹Ή 맡에 ν¬ν•¨λœ key 집합 λ°˜ν™˜
V put(K key, V value)ν•΄λ‹Ή 맡에 μ „λ‹¬λœ key와 value을 μ—°κ²°
V remove(Object key)μ „λ‹¬λœ 객체(key)와 λ™μΌν•œ κ°’ 제거
int size()ν•΄λ‹Ή 맡의 key-value 맡핑 개수 λ°˜ν™˜
Collection< V > values()ν•΄λ‹Ή 맡에 ν¬ν•œλœ value 집합 λ°˜ν™˜

πŸ’¬ Hashtable<K, V> 클래슀


  • JDK 1.0λΆ€ν„° μ‚¬μš©ν•΄ 온 HashMap ν΄λž˜μŠ€μ™€ 같은 λ™μž‘μ„ ν•˜λŠ” 클래슀
  • ν˜„μž¬μ˜ Hashtable ν΄λž˜μŠ€λŠ” HashMap ν΄λž˜μŠ€μ™€ λ§ˆμ°¬κ°€μ§€λ‘œ Map μΈν„°νŽ˜μ΄μŠ€ 상속
  • λ©”μ†Œλ“œλŠ” HashMap ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λ©”μ†Œλ“œμ™€ 거의 κ°™μŒ
  • ν•˜μ§€λ§Œ ν˜„μž¬μ—λŠ” κΈ°μ‘΄ μ½”λ“œμ™€μ˜ ν˜Έν™˜μ„±μ„ μœ„ν•΄μ„œλ§Œ λ‚¨μ•„μžˆμœΌλ―€λ‘œ, Hashtable ν΄λž˜μŠ€λ³΄λ‹€λŠ” HashMap 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŒ

πŸ’¬ TreeMap<K, V> 클래슀


  • 킀와 값을 ν•œ 쌍으둜 ν•˜λŠ” 데이터λ₯Ό 이진 검색 트리(binary search tree)의 ν˜•νƒœλ‘œ μ €μž₯
  • 이진 검색 νŠΈλ¦¬λŠ” 데이터λ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ μ œκ±°ν•˜λŠ” λ“±μ˜ κΈ°λ³Έ λ™μž‘ μ‹œκ°„μ΄ 맀우 빠름
  • JDK 1.2λΆ€ν„° 제곡된 TreeMap ν΄λž˜μŠ€λŠ” NavigableMap μΈν„°νŽ˜μ΄μŠ€λ₯Ό 기쑴의 이진 검색 트리의 μ„±λŠ₯을 ν–₯μƒμ‹œν‚¨ λ ˆλ“œ-λΈ”λž™ 트리(Red-Black tree)둜 κ΅¬ν˜„
    • λ ˆλ“œ λΈ”λž™ 트리
      • 일반적인 이진 탐색 νŠΈλ¦¬λŠ” 트리의 λ†’μ΄λ§ŒνΌ μ‹œκ°„μ΄ κ±Έλ¦Ό
      • λ°μ΄ν„°μ˜ 값이 νŠΈλ¦¬μ— 잘 λΆ„μ‚°λ˜μ–΄ μžˆλ‹€λ©΄ νš¨μœ¨μ„±μ— 큰 λ¬Έμ œκ°€ μ—†μœΌλ‚˜ 데이터가 λ“€μ–΄μ˜¬ λ•Œ 값이 편ν–₯되게 λ“€μ–΄μ˜¬ 경우 ν•œμͺ½μœΌλ‘œ 크게 μΉ˜μš°μ³μ§„ νŠΈλ¦¬κ°€ λ˜μ–΄ ꡉμž₯히 λΉ„νš¨μœ¨μ μΈ 퍼포먼슀 λ‚˜μ˜΄
      • 이 문제λ₯Ό λ³΄μ™„ν•˜κΈ° μœ„ν•΄ λ ˆλ“œ λΈ”λž™ νŠΈλ¦¬κ°€ λ“±μž₯
      • λ ˆλ“œ λΈ”λž™ νŠΈλ¦¬λŠ” λΆ€λͺ¨λ…Έλ“œλ³΄λ‹€ μž‘μ€ 값을 κ°€μ§€λŠ” λ…Έλ“œλŠ” μ™Όμͺ½ μžμ‹μœΌλ‘œ, 큰 값을 κ°€μ§€λŠ” λ…Έλ“œλŠ” 였λ₯Έμͺ½ μžμ‹μœΌλ‘œ λ°°μΉ˜ν•˜μ—¬ λ°μ΄ν„°μ˜ μΆ”κ°€λ‚˜ μ‚­μ œ μ‹œ νŠΈλ¦¬κ°€ ν•œμͺ½μœΌλ‘œ μΉ˜μš°μ³μ§€μ§€ μ•Šλ„λ‘ κ· ν˜•μ„ λ§žμΆ”μ–΄μ€Œ
  • Map μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λ―€λ‘œ, μ€‘λ³΅λœ ν‚€λ‘œλŠ” 값을 μ €μž₯ν•  수 μ—†μŒ
  • ν•˜μ§€λ§Œ 같은 값을 λ‹€λ₯Έ ν‚€λ‘œ μ €μž₯ κ°€λŠ₯
  • 정렬이 λ˜λ©΄μ„œ μΆ”κ°€ 됨
  • null은 ν—ˆμš©ν•˜μ§€ μ•ŠμŒ
  • μ‹œκ°„λ³΅μž‘λ„
    • get : O(log n)
    • containsKey : O(log n)
    • next : O(log n)

β—Ύ TreeMap<K, V>의 μ£Όμš” λ©”μ†Œλ“œ

λ©”μ†Œλ“œμ„€λͺ…
V put(K key, V value)ν•΄λ‹Ή 맡에 μ „λ‹¬λœ 킀에 λŒ€μ‘ν•˜λŠ” κ°’μœΌλ‘œ νŠΉμ • 값을 맀핑
V remove(Object key)ν•΄λ‹Ή λ§΅μ—μ„œ μ „λ‹¬λœ 킀에 λŒ€μ‘ν•˜λŠ” 맀핑을 제거
int size()ν•΄λ‹Ή 맡의 λ§€ν•‘μ˜ 총 개수λ₯Ό λ°˜ν™˜
boolean containsKey(Object key)ν•΄λ‹Ή 맡이 μ „λ‹¬λœ ν‚€λ₯Ό ν¬ν•¨ν•˜κ³  μžˆλŠ”μ§€λ₯Ό 확인
boolean containsValue(Object value)ν•΄λ‹Ή 맡이 μ „λ‹¬λœ 값에 ν•΄λ‹Ήν•˜λŠ” ν•˜λ‚˜ μ΄μƒμ˜ ν‚€λ₯Ό ν¬ν•¨ν•˜κ³  μžˆλŠ”μ§€λ₯Ό 확인
NavigableMap<K, V> descendingMap()ν•΄λ‹Ή 맡에 ν¬ν•¨λœ λͺ¨λ“  맀핑을 μ—­μˆœμœΌλ‘œ λ°˜ν™˜
Set<Map.Entry<K, V>> entrySet()ν•΄λ‹Ή 맡에 ν¬ν•¨λœ λͺ¨λ“  맀핑을 Set 객체둜 λ°˜ν™˜
Map.Entry<K, V> firstEntry()ν•΄λ‹Ή λ§΅μ—μ„œ ν˜„μž¬ κ°€μž₯ μž‘μ€(첫 번째) 킀와 그에 λŒ€μ‘ν•˜λŠ” κ°’μ˜ μ—”νŠΈλ¦¬λ₯Ό λ°˜ν™˜
K firstKey()ν•΄λ‹Ή λ§΅μ—μ„œ ν˜„μž¬ κ°€μž₯ μž‘μ€(첫 번째) ν‚€λ₯Ό λ°˜ν™˜
Map.Entry<K, V> lastEntry()ν•΄λ‹Ή λ§΅μ—μ„œ ν˜„μž¬ κ°€μž₯ 큰(λ§ˆμ§€λ§‰) 킀와 그에 λŒ€μ‘ν•˜λŠ” κ°’μ˜ μ—”νŠΈλ¦¬λ₯Ό λ°˜ν™˜
K lastKey()ν•΄λ‹Ή λ§΅μ—μ„œ ν˜„μž¬ κ°€μž₯ 큰(λ§ˆμ§€λ§‰) ν‚€λ₯Ό λ°˜ν™˜
Map.Entry<K, V> ceilingEntry(K key)ν•΄λ‹Ή λ§΅μ—μ„œ μ „λ‹¬λœ 킀와 κ°™κ±°λ‚˜, 큰 ν‚€ μ€‘μ—μ„œ κ°€μž₯ μž‘μ€ 킀와 κ°’μ˜ μ—”νŠΈλ¦¬ λ°˜ν™˜ (λ§Œμ•½ ν•΄λ‹Ήν•˜λŠ” ν‚€κ°€ μ—†μœΌλ©΄ null λ°˜ν™˜)
K ceilingKey(K key)ν•΄λ‹Ή λ§΅μ—μ„œ μ „λ‹¬λœ 킀와 κ°™κ±°λ‚˜, 큰 ν‚€ μ€‘μ—μ„œ κ°€μž₯ μž‘μ€ ν‚€ λ°˜ν™˜ (λ§Œμ•½ ν•΄λ‹Ήν•˜λŠ” ν‚€κ°€ μ—†μœΌλ©΄ null λ°˜ν™˜)
Map.Entry<K, V> floorEntry(K key)ν•΄λ‹Ή λ§΅μ—μ„œ μ „λ‹¬λœ 킀와 κ°™κ±°λ‚˜, μž‘μ€ ν‚€ μ€‘μ—μ„œ κ°€μž₯ 큰 ν‚€ κ°’μ˜ μ—”νŠΈλ¦¬ λ°˜ν™˜ (λ§Œμ•½ ν•΄λ‹Ήν•˜λŠ” μ—”νŠΈλ¦¬κ°€ μ—†μœΌλ©΄ null λ°˜ν™˜)
K floorKey(K key)ν•΄λ‹Ή λ§΅μ—μ„œ μ „λ‹¬λœ 킀와 κ°™κ±°λ‚˜, μž‘μ€ ν‚€ μ€‘μ—μ„œ κ°€μž₯ 큰 ν‚€ λ°˜ν™˜ (λ§Œμ•½ ν•΄λ‹Ήν•˜λŠ” ν‚€κ°€ μ—†μœΌλ©΄ null λ°˜ν™˜)
Map.Entry<K, V> higherEntry(K key)ν•΄λ‹Ή λ§΅μ—μ„œ μ „λ‹¬λœ 킀보닀 μž‘μ€ ν‚€ μ€‘μ—μ„œ κ°€μž₯ 큰 ν‚€ κ°’μ˜ μ—”νŠΈλ¦¬ λ°˜ν™˜ (λ§Œμ•½ ν•΄λ‹Ήν•˜λŠ” μ—”νŠΈλ¦¬κ°€ μ—†μœΌλ©΄ null λ°˜ν™˜)
K higherKey(K key)ν•΄λ‹Ή λ§΅μ—μ„œ μ „λ‹¬λœ 킀보닀 μž‘μ€ ν‚€ μ€‘μ—μ„œ κ°€μž₯ 큰 ν‚€ λ°˜ν™˜ (λ§Œμ•½ ν•΄λ‹Ήν•˜λŠ” ν‚€κ°€ μ—†μœΌλ©΄ null λ°˜ν™˜)
Map.Entry<K, V> lowerEntry(K key)ν•΄λ‹Ή λ§΅μ—μ„œ μ „λ‹¬λœ 킀보닀 큰 ν‚€ μ€‘μ—μ„œ κ°€μž₯ μž‘μ€ 킀와 κ°’μ˜ μ—”νŠΈλ¦¬ λ°˜ν™˜ (λ§Œμ•½ ν•΄λ‹Ήν•˜λŠ” ν‚€κ°€ μ—†μœΌλ©΄ null λ°˜ν™˜)
K lowerKey(K key)ν•΄λ‹Ή λ§΅μ—μ„œ μ „λ‹¬λœ 킀보닀 큰 ν‚€ μ€‘μ—μ„œ κ°€μž₯ μž‘μ€ ν‚€ λ°˜ν™˜ (λ§Œμ•½ ν•΄λ‹Ήν•˜λŠ” ν‚€κ°€ μ—†μœΌλ©΄ null λ°˜ν™˜)
Map.Entry<K, V> pollFirstEntry()ν•΄λ‹Ή λ§΅μ—μ„œ ν˜„μž¬ κ°€μž₯ μž‘μ€(첫 번째) 킀와 그에 λŒ€μ‘ν•˜λŠ” κ°’μ˜ μ—”νŠΈλ¦¬λ₯Ό λ°˜ν™˜ν•˜κ³ , ν•΄λ‹Ή μ—”νŠΈλ¦¬λ₯Ό λ§΅μ—μ„œ 제거
Map.Entry<K, V> pollLastEntry()ν•΄λ‹Ή λ§΅μ—μ„œ ν˜„μž¬ κ°€μž₯ 큰(λ§ˆμ§€λ§‰) 킀와 그에 λŒ€μ‘ν•˜λŠ” κ°’μ˜ μ—”νŠΈλ¦¬λ₯Ό λ°˜ν™˜ν•˜κ³ , ν•΄λ‹Ή μ—”νŠΈλ¦¬λ₯Ό λ§΅μ—μ„œ 제거
SortedMap<K, V> subMap(K fromKey, K toKey)ν•΄λ‹Ή λ§΅μ—μ„œ fromKeyλΆ€ν„° toKeyκΉŒμ§€λ‘œ κ΅¬μ„±λœ λΆ€λΆ„λ§Œ λ°˜ν™˜ (μ΄λ•Œ fromKeyλŠ” ν¬ν•¨λ˜λ‚˜, toKeyλŠ” ν¬ν•¨λ˜μ§€ μ•ŠμŒ)
SortedMap<K, V> tailMap(K fromKey)ν•΄λ‹Ή λ§΅μ—μ„œ fromKey와 κ°™κ±°λ‚˜, fromKey보닀 큰 ν‚€λ‘œ κ΅¬μ„±λœ λΆ€λΆ„λ§Œμ„ λ°˜ν™˜

0개의 λŒ“κΈ€