CodeGym /Blog Java /Random-ES /Cómo crear un diccionario en Java
Autor
Volodymyr Portianko
Java Engineer at Playtika

Cómo crear un diccionario en Java

Publicado en el grupo Random-ES
Si necesita crear un diccionario en un programa Java, la forma más lógica de resolver este problema es utilizar la estructura de datos del diccionario. Esta estructura de datos le permite almacenar información en forma de "clave - valor". Java tiene una clase de diccionario especial , así como su descendiente, Hashtable . También está la interfaz Map y la clase HashMap , que también almacena pares "clave - valor". Así que hay muchas formas de crear un diccionario Java.

Estructura de datos del diccionario

Por lo tanto, la estructura de datos del Diccionario almacena información como una combinación clave-valor. Es decir, con cualquier valor asociamos una clave (puede ser, por ejemplo, id) e ingresamos este par en el diccionario. La tecla realiza el direccionamiento de un elemento del diccionario, la eliminación, la búsqueda en el diccionario. Parece conveniente organizarse utilizando tal estructura de datos, por ejemplo, una guía telefónica, donde el nombre (clave) corresponde al número de teléfono (valor).

Clase de diccionario y su extensión.

Para empezar, java.util.Dictionary <K, V> util.Dictionary es una clase abstracta. Representa una relación clave-valor y funciona de manera similar a un mapa. Dada una clave, puede almacenar valores y, cuando sea necesario, puede recuperar el valor utilizando su clave. Por lo tanto, es una lista de pares clave-valor.

public abstract class Dictionary<K,V> extends Object
Dado que esta clase es abstracta, no trabajaremos con ella directamente. Dictionary tiene una Hashtable de clase secundaria directa . Entonces, para crear un diccionario en Java, puede usar Hashtable . Esta clase implementa una tabla hash, que asigna claves a valores y cualquier objeto que no sea nulo se puede usar como clave o como valor. En la jerarquía de Java, Hashtable extiende Dictionary e implementa Map . Demos un ejemplo. Vamos a crear un diccionario clásico, una guía telefónica, basado en Hashtable .

Dictionary phoneBook = new Hashtable();
Si escribimos de esta manera, deberíamos aplicar la conversión de tipos para algunas operaciones. Por ejemplo, para una extracción de clave.

System.out.println(((Hashtable) phoneBook).keySet());
Para evitar esto, podemos cambiar

Dictionary phoneBook = new Hashtable ();
sobre el

Hashtable phoneBook = new Hashtable ();
En nuestro ejemplo, para mayor claridad, dejaremos la primera opción.

import java.util.Dictionary;
import java.util.Hashtable;

public class DictionaryDemo {

       public static void main(String[] args) {

           Dictionary phoneBook = new Hashtable();

           // put() method
           phoneBook.put("Johnny Walker", "2178");
           phoneBook.put("Andrew Arnold", "1298");
           phoneBook.put("Ivy Briggs", "1877");
           phoneBook.put("Ricky McBright", "2001");

           //print out Hashtable out
           System.out.println(phoneBook);

           //let's get the value using the key
           System.out.println(phoneBook.get("Ivy Briggs"));
           //there's no such key in out Hashtable
           System.out.println(phoneBook.get("Sol Frank"));

           //Is there a record with the "Johnny Walker" key?
           System.out.println(((Hashtable) phoneBook).containsKey("Johnny Walker"));
           //all keys of the Hashtable
           System.out.println(((Hashtable) phoneBook).keySet());
           //values from Hashtable
           System.out.println(((Hashtable) phoneBook).values());

           //the quantity of records
           System.out.println(phoneBook.size());
           //removing one record
           phoneBook.remove("Andrew Arnold");
           System.out.println(phoneBook);
       }
   }
La salida es:
{Andrew Arnold=1298, Johnny Walker=2178, Ricky McBright=2001, Ivy Briggs=1877} 1877 nulo verdadero [Andrew Arnold, Johnny Walker, Ricky McBright, Ivy Briggs] [1298, 2178, 2001, 1877] 4 {Johnny Walker =2178, Ricky McBright=2001, Ivy Briggs=1877}

HashMap como diccionario

HashMap , a diferencia de Hashtable , no es un descendiente directo de Dictionary . Sin embargo, debido a muchas características, en la mayoría de los casos es mejor crear un diccionario usando HashMap . La clase HashMap es muy similar en funcionalidad a Hashtable . La principal diferencia es que los métodos de Hashtable están sincronizados, pero HashMap no. La sincronización en Hashtable disminuye el rendimiento del código. Además, la clase HashMap , a diferencia de Hashtable, permite el uso de nulos como clave (uno) y un conjunto de nulos como valores. En nuestro caso, el programa se verá exactamente igual que el ejemplo anterior. La única diferencia está en el tipo de colección. Sin embargo, esta es la forma preferida de trabajar con diccionarios en Java en la mayoría de los casos.

import java.util.HashMap;
import java.util.Map;

public class DictionaryDemo2 {

   public static void main(String[] args) {

       Map<String, String> phoneBook = new HashMap<String,String>();
      
       phoneBook.put("Johnny Walker", "2178");
       phoneBook.put("Andrew Arnold", "1298");
       phoneBook.put("Ivy Briggs", "1877");
       phoneBook.put("Ricky McBright", "2001");
      
       System.out.println(phoneBook);
      
       System.out.println(phoneBook.get("Johnny Walker"));
       System.out.println(phoneBook.get("Ivy Briggs"));
       System.out.println(phoneBook.get("Unknown Friend"));
      
       System.out.println(phoneBook.containsKey("Johnny Walker"));
       System.out.println(phoneBook.containsKey("Unknown Friend"));

       System.out.println(phoneBook.keySet());
       System.out.println(phoneBook.values());

       System.out.println(phoneBook.size());

       phoneBook.remove("Andrew Arnold");

       System.out.println(phoneBook);
   }

}
Aquí está la salida:
{Andrew Arnold=1298, Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178} 2178 1877 nulo verdadero falso [Andrew Arnold, Ivy Briggs, Ricky McBright, Johnny Walker] [1298, 1877, 2001, 2178] 4 { Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178}
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION