Concurrent Hashmap은 jdk1.5에서 도입된 클래스입니다. 동시 해시 맵은 맵을 추가하거나 업데이트하는 동안 프래그먼트라는 버킷 수준에서만 잠금을 적용합니다. 따라서 동시 해시 맵은 맵에 대한 동시 읽기 및 쓰기 작업을 허용합니다.
HashTable은 Jdk1.1에 도입된 스레드로부터 안전한 레거시 클래스입니다. Map 인터페이스의 기본 구현입니다. null 키와 값을 허용하지 않습니다. 본질적으로 동기화되어 두 개의 다른 스레드가 동시에 액세스할 수 없습니다. Hashtable은 어떤 순서도 유지하지 않습니다.
| Sr. 아니요. | 키 | 해시 테이블 | ConcurrentHashMap |
|---|---|---|---|
| 1 | 기본 | HashTable은 Jdk1.1에 도입된 스레드로부터 안전한 레거시 클래스입니다. | ConcurrentHashmap은 jdk1.5에서 도입된 클래스입니다. |
| 2 | 잠금 | 전체 컬렉션에 잠금을 적용합니다. | ConcurrentHashMap은 맵을 추가하거나 업데이트하는 동안 조각이라는 버킷 수준에서만 잠금을 적용합니다. |
| 3 | 성능 | ConcurrentHashMap보다 느립니다. | HashTable보다 낫습니다. |
| 4. | 널 | null 키와 값을 허용하지 않습니다. | null 키와 값을 허용합니다. |
해시테이블의 예
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
public class HashtableExample {
public static void main(String[] args) {
// create Hashtable
Hashtable map = new Hashtable();
map.put("HCL", "100");
map.put("DELL", "200");
map.put("IBM", "300");
// print the map
for (Map.Entry m : map.entrySet()) {
System.out.println(m.getKey() + " " + m.getValue());
}
}
} ConcurrentHashMap의 예
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class ConcurrentHashMapExample {
public static void main(String[] args) {
// ConcurrentHashMap
Map myMap = new ConcurrentHashMap();
myMap.put("HCL", "1");
myMap.put("DELL", "1");
// print the map
for (Map.Entry m : map.entrySet()) {
System.out.println(m.getKey() + " " + m.getValue());
}
}
}