ConcurrentHashMap vs Hashtable em Java

Mohammad Irfan 12 outubro 2023
  1. Criação de ConcurrentHashMap em Java
  2. Criação de HashTable em Java
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