HashTable vs HashMap

· β˜• 2 min read · πŸ‘€... views

HashTable VS HashMap


λ©”λͺ¨λ¦¬ 내에 key/value 짝으둜 λ˜μ–΄μžˆλŠ” 데이터이닀. 두 데이터 νƒ€μž…μ˜ 차이점을 μ•Œμ•„λ³΄κ³ μž ν•œλ‹€.

1. λΉ„μŠ·ν•œ 점

  • μΆ”κ°€, μ‚­μ œ, 접근이 λΉ„μŠ·ν•˜λ‹€.
  1. get() : ν‚€λ₯Ό 톡해 μ•„μ΄ν…œ 검색
  2. remove() : ν‚€λ₯Ό 톡해 μ‚­μ œ
  3. put() : μ•„μ΄ν…œμ„ μΆ”κ°€
  • java.util νŒ¨ν‚€μ§€ 내에 μ†ν•΄μžˆλ‹€.

2. λ‹€λ₯Έ 점

  • 두 데이터 νƒ€μž…μ€ 맀우 λ§Žμ€ λ‹€λ₯Έ 점이 μ‘΄μž¬ν•˜μ§€λ§Œ, 주된 것 λͺ‡ κ°€μ§€λ§Œ μ•Œμ•„λ³΄μž
  1. HashTable 의 경우 μ•”λ¬΅μ μœΌλ‘œ λ™κΈ°ν™”λ˜μ–΄ λ©€ν‹° μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œ λ™μž‘ν•˜κΈ° μš©μ΄ν•˜λ‹€.

    μ—‘μ„ΈμŠ€ μ‹œ μŠ€λ ˆλ“œλŠ” HashTable 을 락해 λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ λ™μ‹œμ— λ³€κ²½ν•˜λŠ” 것을 λ°©μ§€ν•œλ‹€.

    λ°˜λŒ€λ‘œ HashMap 의 κ²½μš°μ—λŠ” 단일 μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œ μ ν•©ν•˜λ‹€. λ§Œμ•½ λ©€ν‹° μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œ HashMap 을 μ‚¬μš©ν•˜κ³ μž ν•œλ‹€λ©΄

    ConcurrentHashMap 을 μ‚¬μš©ν•  수 μžˆλ‹€.
  1. HashTable 의 경우 단일 μŠ€λ ˆλ“œ ν™˜κ²½μ—μ„œλ„ 각 λ©”μ†Œλ“œ ν˜ΈμΆœν•  λ•Œ μ•”λ¬΅μ μœΌλ‘œ 동기화λ₯Ό ν•˜κΈ° λ•Œλ¬Έμ— HashMap 보닀 λŠλ¦¬λ‹€.
  1. HashMap 은 Null 을 μ €μž₯ν•  수 μžˆμ§€λ§Œ, HashTable 은 μ €μž₯ν•  수 μ—†λ‹€.
  1. HashMap 의 경우 fail-fast 둜 κ³ λ €λ˜μ–΄μ§€λŠ” Iterator 을 μ‚¬μš©ν•  수 μžˆλ‹€. 즉, iterator ν•˜κ³  μžˆλŠ” 도쀑에

    λ‹€λ₯Έ μŠ€λ ˆλ“œκ°€ Map 을 λ³€κ²½ν•  경우 ConcurrentModificationException 을 λ˜μ§„λ‹€. ν•˜μ§€λ§Œ, HashTable 의 경우 fail-fast κ°€ μ•„λ‹Œ Enumerator 둜 μˆœνšŒν•œλ‹€.
  1. HashMap 의 경우 LinkedHashMap κ³Ό TreeMap 을 κ΅¬ν˜„ν•¨μœΌλ‘œμ¨ 정렬이 κ°€λŠ₯ν•˜μ§€λ§Œ, HashTable 은 그렇지 λͺ»ν•˜λ‹€.

κ²°κ΅­ HashTable 은 deprecate λ˜κ±°λ‚˜ κ³΅μ‹μ μœΌλ‘œ ConcurrentHashMap 으둜 λŒ€μ²΄λœλ‹€κ³  ν•©λ‹ˆλ‹€.

HashTable 의 경우 μ’€ μƒμ†Œν–ˆμŠ΅λ‹ˆλ‹€. ConcurrentHashMap 은 μ‚¬μš©ν•΄λ³Έ 적이 μžˆμ§€λ§Œμš”.
μ–΄μ°Œλ³΄λ©΄ 차이점은 동기화 라고 λ³Ό μˆ˜λ„ μžˆμ„ 것 같은데, 그것도 ConcurrentHashMap 이 λ‚˜μ˜€λ©΄μ„œ 해결이 된 λŠλ‚Œμ΄λ„€μš”.
그러면 λ“œλŠ” 생각은 HashTable vs ConcurrentHashMap μΈλ°μš”. 이 뢀뢄도 λ‚˜μ€‘μ— μ°Ύμ•„λ΄μ•Όκ² κ΅°μš”.




[좜처] - https://www.programmergate.com/hashtable-vs-hashmap/

Share on

snack
WRITTEN BY
snack
Web Programmer


What's on this Page