CodeGym /Java Blog /Random-IT /Come creare un dizionario in Java
John Squirrels
Livello 41
San Francisco

Come creare un dizionario in Java

Pubblicato nel gruppo Random-IT
Se è necessario creare un dizionario in un programma Java, il modo più logico per risolvere questo problema è utilizzare la struttura dei dati del dizionario. Questa struttura dati consente di memorizzare informazioni nella forma "chiave - valore". Java ha una classe Dictionary speciale così come il suo discendente, Hashtable . Inoltre c'è l' interfaccia Map e la classe HashMap , che memorizza anche coppie "chiave - valore". Quindi ci sono molti modi per creare un dizionario Java.

Struttura dei dati del dizionario

Pertanto, la struttura dei dati del dizionario memorizza le informazioni come combinazione chiave-valore. Cioè, a qualsiasi valore associamo una chiave (può essere, ad esempio, id) e inseriamo questa coppia nel dizionario. L'indirizzamento di un elemento del dizionario, l'eliminazione, la ricerca nel dizionario viene eseguita dalla chiave. Sembra conveniente organizzare utilizzando tale struttura dati, ad esempio una rubrica telefonica, dove il nome (tasto) corrisponde al numero di telefono (valore).

Classe dizionario e sua estensione

Per cominciare, java.util.Dictionary <K, V> util.Dictionary è una classe astratta. Rappresenta una relazione chiave-valore e funziona in modo simile a una mappa. Data una chiave è possibile memorizzare valori e quando necessario è possibile recuperare il valore utilizzando la sua chiave. Pertanto, è un elenco di coppie chiave-valore.

public abstract class Dictionary<K,V> extends Object
Poiché questa classe è astratta, non lavoreremo direttamente con essa. Il dizionario ha una classe figlia diretta Hashtable . Quindi per creare un dizionario in Java puoi usare Hashtable . Questa classe implementa una tabella hash, che associa le chiavi ai valori e qualsiasi oggetto non nullo può essere utilizzato come chiave o come valore. Nella gerarchia Java Hashtable estende Dictionary e implementa Map . Facciamo un esempio. Creeremo un dizionario classico, un elenco telefonico, basato su Hashtable .

Dictionary phoneBook = new Hashtable();
Se scriviamo in questo modo, dovremmo applicare il casting di tipo per alcune operazioni. Ad esempio, per un'estrazione di chiavi.

System.out.println(((Hashtable) phoneBook).keySet());
Per evitare questo, possiamo cambiare

Dictionary phoneBook = new Hashtable ();
sul

Hashtable phoneBook = new Hashtable ();
Nel nostro esempio, per chiarezza, lasceremo la prima opzione.

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);
       }
   }
L'uscita è:
{Andrew Arnold=1298, Johnny Walker=2178, Ricky McBright=2001, Ivy Briggs=1877} 1877 null true [Andrew Arnold, Johnny Walker, Ricky McBright, Ivy Briggs] [1298, 2178, 2001, 1877] 4 {Johnny Walker =2178, Ricky McBright=2001, Ivy Briggs=1877}

HashMap come dizionario

HashMap , a differenza di Hashtable , non è un diretto discendente di Dictionary . Tuttavia, a causa di molte funzionalità, nella maggior parte dei casi è meglio creare un dizionario utilizzando HashMap . La classe HashMap è molto simile nella funzionalità a Hashtable . La differenza principale è che i metodi di Hashtable sono sincronizzati, ma HashMap no. La sincronizzazione in Hashtable riduce le prestazioni del codice. Inoltre, la classe HashMap , a differenza di Hashtable, consente l'uso di null come chiave (uno) e un insieme di null come valori. Nel nostro caso, il programma avrà esattamente lo stesso aspetto dell'esempio precedente. L'unica differenza è nel tipo di raccolta. Tuttavia, questo è il modo preferito per lavorare con i dizionari in Java nella maggior parte dei casi.

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

}
Ecco l'output:
{Andrew Arnold=1298, Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178} 2178 1877 null true false [Andrew Arnold, Ivy Briggs, Ricky McBright, Johnny Walker] [1298, 1877, 2001, 2178] 4 { Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178}
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION