memostack
article thumbnail
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
반응형

HashMapHashtable 모두 map 자료구조다.

  • 사용 방법도 거의 동일하지만, 차이점이 있음
<java />
// HashMap Map<Integer, String> map = new HashMap<>(); map.put(1, "one"); map.put(2, "two"); System.out.println(map.get(1)); // one System.out.println(map.get(2)); // two // Hashtable Map<Integer, String> table = new Hashtable<>(); table.put(1, "one"); table.put(2, "two"); System.out.println(table.get(1)); // one System.out.println(table.get(2)); // two

 

1. HashMap

HashMap은 동기화를 지원하지 않는다.

  • 단일스레드 환경에서 사용하기 좋은 자료구조

 

IDE의 구현부를 보면, 아래 Hashtable과는 다르게 synchronized 키워드가 없음

<java />
// get method public V get(Object key) { Node<K,V> e; return (e = getNode(hash(key), key)) == null ? null : e.value; } // put method public V put(K key, V value) { return putVal(hash(key), key, value, false, true); }

 

또, HashMapkey 값이나 value 값에 null이 들어갈 수 있음

<java />
Map<Integer, String> map = new HashMap<>(); map.put(null, "null"); System.out.println(map.get(null)); // null

 

2. Hashtable

Hashtable은 동기화를 지원하여, thread-safe하다.

  • 멀티스레드 환경에서 사용하기 좋은 자료구조
  • 하지만, HashMap에 비해 느리다. (다른 스레드가 block되고 unblock 되는 대기 시간을 기다리기 때문)

 

IDE를 이용해 구현부를 보면 synchronized 키워드가 붙어있다.

<java />
// get method public synchronized V get(Object key) { // ... 중략 ... } // put method public synchronized V put(K key, V value) { // ... 중략 ... }

 

또, Hashtable은 key값이나 value값에 null이 들어갈 수없다.

<java />
Map<Integer, String> table = new Hashtable<>(); table.put(null, "null"); // Exception in thread "main" java.lang.NullPointerException // at java.util.Hashtable.put(Hashtable.java:465) // at Main.main(Main.java:10)

 

HashMap과 Hashtable의 차이

반응형
블로그를 이전하였습니다. 2023년 11월부터 https://bluemiv.github.io/에서 블로그를 운영하려고 합니다. 앞으로 해당 블로그의 댓글은 읽지 못할 수 도 있으니 양해바랍니다.
profile

memostack

@bluemiv_mm

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!