본문 바로가기
[개발] Programming/Java

자바 HashMap vs Hashtable 차이점, 예제

by eatyourKimchi 2018. 11. 8.


HashMap VS HashTable


둘의 차이점을 최대한 요약해서 정리해보자면


1. HashMap은 단일 스레드 적합하며 null을 허용하지만 동기화가 안된다.

2. HashTable은 멀티 스레드에 적합하고 동기화되지만 null을 입력할 수 없고 동기화에 따른 성능의 저하가 발생한다.


아래는 상세한 차이점.




HashMap vs Hashtable


HashMap

1) 비동기식이다. 멀티 스레드에는 적합하지 않다

2) key, value에서 하나의 null key와 다수의 널 value를 허용한다. 

3) HashMap is a new class introduced in JDK 1.2. 

4) 속도가 비교적 빠르다.

5) 아래 코드를 사용하면 동기화가 가능하다. 

  Map m = Collections.synchronizedMap(HashMap); 

6) HashMap is traversed by Iterator. 

7) Iterator in HashMap is fail-fast. 

8) HashMap inherits AbstractMap class. 


Hashtable

1) 동기식이다. 멀티 스레드 환경에 적합하다. 

2) null key or value 불가능. 

3) Hashtable is a legacy class. 

4) 속도가 비교적 느리다. 

5) 비동기화로 사용될 수 없다. 

6) Hashtable is traversed by Enumerator and Iterator. 

7) Enumerator in Hashtable is not fail-fast. 

8) Hashtable inherits Dictionary class.




예제

HashMap

import java.util.HashMap;

import java.util.Map;


public class TestClass {

    public static void main(String args[ ]) {

    Map<Integer,String> states = new HashMap<Integer,String>();


    states.put(1, "KOREA");

    states.put(2, "USA");

    states.put(3, null);     // 문제 없음

    states.put(null,"UK");  // 문제 없음


    System.out.println(states.get(1));

    System.out.println(states.get(2));

    System.out.println(states.get(3));

    }

}


Hashtable

import java.util.Map;

import java.util.Hashtable;


public class TestClass {

    public static void main(String args[ ]) {

    Map<Integer,String> states= new Hashtable<Integer,String>();


    states.put(1,    "KOREA");

    states.put(2,    "USA");

    states.put(3,     null);     // runtime에 NullPointerEcxeption 발생

    states.put(null, "THAI");  // runtime에 NullPointerEcxeption 발생


    System.out.println(states.get(1));

    System.out.println(states.get(2));

    System.out.println(states.get(3));

    }

}



출처   code.i-harness.com

댓글