Java의 ConcurrentHashMap 대 HashTable
Mohammad Irfan
2023년10월12일
이 튜토리얼은 Java에서 ConcurrentHashMap과 Hashtable의 차이점을 소개합니다.
ConcurrentHashMap은 java.util.concurrent
프레임워크에 속하는 클래스입니다. ConcurrentMap과 Serializable 인터페이스를 구현합니다. 스레드로부터 안전한 데이터를 저장하는 데 사용됩니다. 여러 버킷을 사용하여 데이터를 저장합니다. 이것의 선언 구문은 다음과 같습니다.
public class ConcurrentHashMap<K, V>
extends AbstractMap<K, V> implements ConcurrentMap<K, V>, Serializable
ConcurrentHashMap 키포인트
- 스레드로부터 안전합니다.
- 전체 맵 대신 세그먼트 수준에서 다중 잠금을 사용합니다.
- 기본적으로 16개의 잠금을 사용합니다.
- 업데이트에 대한 잠금에만 적용됩니다. 읽기의 경우 여러 스레드가 데이터에 액세스할 수 있습니다.
ConcurrentHashMap의 예를 보자.
Java에서 ConcurrentHashMap 만들기
이 예제에서는 String 및 Integer 유형의 데이터를 보유하는 ConcurrentHashMap을 생성했습니다. put()
메소드를 사용하여 요소를 추가하고 getKey()
및 getValue()
메소드를 사용하여 각각 키와 값에 액세스했습니다. 아래의 예를 참조하십시오.
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class SimpleTesting {
ConcurrentHashMap<String, Integer> hm = new ConcurrentHashMap<String, Integer>();
public void AddScore(String name, int score) {
hm.put(name, score);
}
public static void main(String[] args) {
SimpleTesting simpleTesting = new SimpleTesting();
simpleTesting.AddScore("Rohan", 95);
simpleTesting.AddScore("Sohan", 85);
simpleTesting.AddScore("Mohan", 93);
simpleTesting.AddScore("Lohan", 91);
System.out.println("Students Scores: ");
for (Map.Entry<String, Integer> entry : simpleTesting.hm.entrySet()) {
System.out.println(entry.getKey() + " - " + entry.getValue());
}
}
}
출력:
Students Scores:
Lohan - 91
Mohan - 93
Sohan - 85
Rohan - 95
HashTable은 Java 컬렉션 프레임워크에 속하는 클래스입니다. 키 및 값 쌍에 데이터를 저장하는 데 사용됩니다. Map, Cloneable 및 Serializable 인터페이스를 구현합니다. 클래스 선언은 아래와 같습니다.
public class Hashtable<K, V> extends Dictionary<K, V> implements Map<K, V>, Cloneable, Serializable
HashTable 키포인트:
- 전체 데이터에 대해 단일 잠금을 사용합니다.
- 스레드로부터 안전합니다. 즉, 동기화됩니다.
- null 키 또는 값을 허용하지 않습니다.
HashTable의 예를 보자.
Java에서 HashTable 만들기
이 예제에서는 문자열 및 정수 유형의 데이터를 저장하는 HashTable을 만들었습니다. put()
메소드를 사용하여 요소를 추가하고 getKey()
및 getValue()
메소드를 사용하여 각각 키와 값에 액세스합니다. 아래의 예를 참조하십시오.
import java.util.Hashtable;
import java.util.Map;
public class SimpleTesting {
Hashtable<String, Integer> hm = new Hashtable<String, Integer>();
public void AddScore(String name, int score) {
hm.put(name, score);
}
public static void main(String[] args) {
SimpleTesting simpleTesting = new SimpleTesting();
simpleTesting.AddScore("Rohan", 95);
simpleTesting.AddScore("Sohan", 85);
simpleTesting.AddScore("Mohan", 93);
simpleTesting.AddScore("Lohan", 91);
System.out.println("Students Scores: ");
for (Map.Entry<String, Integer> entry : simpleTesting.hm.entrySet()) {
System.out.println(entry.getKey() + " - " + entry.getValue());
}
}
}
출력:
Students Scores:
Rohan - 95
Mohan - 93
Sohan - 85
Lohan - 91