ConcurrentHashMap vs Hashtable em Java
Este tutorial apresenta a diferença entre ConcurrentHashMap e Hashtable em Java.
ConcurrentHashMap é uma classe que pertence à estrutura java.util.concurrent
. Ele implementa ConcurrentMap e uma interface serializável. É usado para armazenar dados seguros para threads. Ele usa vários baldes para armazenar dados. A sintaxe da declaração é:
public class ConcurrentHashMap<K, V>
extends AbstractMap<K, V> implements ConcurrentMap<K, V>, Serializable
Pontos-chave de ConcurrentHashMap
- É thread-safe.
- Ele usa vários bloqueios no nível do segmento em vez de todo o mapa.
- Ele usa 16 bloqueios por padrão.
- Aplica-se ao bloqueio apenas para atualizações. Para leitura, permite que vários threads acessem os dados.
Vamos ver um exemplo de ConcurrentHashMap.
Criação de ConcurrentHashMap em Java
Neste exemplo, criamos um ConcurrentHashMap que contém dados do tipo String e Integer. Usamos o método put()
para adicionar elementos e os métodos getKey()
e getValue()
para acessar a chave e o valor, respectivamente. Veja o exemplo abaixo.
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());
}
}
}
Resultado:
Students Scores:
Lohan - 91
Mohan - 93
Sohan - 85
Rohan - 95
HashTable é uma classe que pertence à estrutura de coleção Java. É usado para armazenar dados em pares de chave e valor. Ele implementa interface Map, Cloneable e Serializable. A declaração da classe é fornecida abaixo.
public class Hashtable<K, V> extends Dictionary<K, V> implements Map<K, V>, Cloneable, Serializable
Pontos-chave do HashTable:
- Ele usa um único bloqueio para todos os dados.
- É thread-safe, ou seja, sincronizado.
- Não permite chaves ou valores nulos.
Vamos ver um exemplo de HashTable.
Criação de HashTable em Java
Neste exemplo, criamos um HashTable que armazena dados de string e tipo inteiro. Usamos o método put()
para adicionar elementos e os métodos getKey()
e getValue()
para acessar a chave e o valor, respectivamente. Veja o exemplo abaixo.
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());
}
}
}
Resultado:
Students Scores:
Rohan - 95
Mohan - 93
Sohan - 85
Lohan - 91