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()); } } }