CodeGym /Blog Java /Random-FR /Comment créer un dictionnaire en Java
Auteur
Volodymyr Portianko
Java Engineer at Playtika

Comment créer un dictionnaire en Java

Publié dans le groupe Random-FR
Si vous devez créer un dictionnaire dans un programme Java, la manière la plus logique de résoudre ce problème consiste à utiliser la structure de données du dictionnaire. Cette structure de données permet de stocker des informations sous la forme "clé - valeur". Java a une classe Dictionary spéciale ainsi que son descendant, Hashtable . Il y a aussi l' interface Map et la classe HashMap , qui stocke également des paires "clé - valeur". Il existe donc de nombreuses façons de créer un dictionnaire Java.

Structure des données du dictionnaire

Ainsi, la structure de données du dictionnaire stocke les informations sous la forme d'une combinaison clé-valeur. C'est-à-dire qu'à toute valeur, nous associons une clé (ce peut être, par exemple, id) et entrons cette paire dans le dictionnaire. L'adressage d'un élément du dictionnaire, l'effacement, la recherche dans le dictionnaire sont effectués par la clé. Il semble commode d'organiser en utilisant une telle structure de données, par exemple un annuaire téléphonique, où le nom (clé) correspond au numéro de téléphone (valeur).

Classe de dictionnaire et son extension

Pour commencer, java.util.Dictionary <K, V> util.Dictionary est une classe abstraite. Il représente une relation clé-valeur et fonctionne comme une carte. Étant donné une clé, vous pouvez stocker des valeurs et, si nécessaire, récupérer la valeur à l'aide de sa clé. Ainsi, il s'agit d'une liste de paires clé-valeur.

public abstract class Dictionary<K,V> extends Object
Puisque cette classe est abstraite, nous ne travaillerons pas directement avec elle. Dictionary a une classe enfant directe Hashtable. Ainsi, pour créer un dictionnaire en Java, vous pouvez utiliser Hashtable. Cette classe implémente une table de hachage, qui mappe les clés aux valeurs et tout objet non nul peut être utilisé comme clé ou comme valeur. Dans la hiérarchie Java, Hashtable étend Dictionary et implémente Map. Donnons un exemple. Nous allons créer un dictionnaire classique, un annuaire téléphonique, basé sur Hashtable .

Dictionary phoneBook = new Hashtable();

Si nous écrivons de cette façon, nous devrions appliquer la conversion de type pour certaines opérations. Par exemple, pour une extraction de clé.

System.out.println(((Hashtable) phoneBook).keySet());
Pour éviter cela, nous pouvons modifier

Dictionary phoneBook = new Hashtable ();
sur le

Hashtable phoneBook = new Hashtable ();
Dans notre exemple, pour plus de clarté, nous laisserons la première option.

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 sortie est:
{Andrew Arnold=1298, Johnny Walker=2178, Ricky McBright=2001, Ivy Briggs=1877} 1877 null vrai [Andrew Arnold, Johnny Walker, Ricky McBright, Ivy Briggs] [1298, 2178, 2001, 1877] 4 {Johnny Walker =2178, Ricky McBright=2001, Ivy Briggs=1877}

HashMap comme dictionnaire

HashMap , contrairement à Hashtable , n'est pas un descendant direct de Dictionary . Cependant, en raison de nombreuses fonctionnalités, dans la plupart des cas, il est préférable de créer un dictionnaire à l'aide de HashMap . La classe HashMap est très similaire en fonctionnalités à Hashtable . La principale différence est que les méthodes de la Hashtable sont synchronisées, mais pas la HashMap. La synchronisation dans la Hashtable diminue les performances du code. De plus, la classe HashMap , contrairement à Hashtable, permet l'utilisation de null comme clé (un) et d'un ensemble de null comme valeurs. Dans notre cas, le programme ressemblera exactement à l'exemple ci-dessus. La seule différence réside dans le type de collection. Cependant, c'est la manière préférée de travailler avec des dictionnaires en Java dans la plupart des cas.

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

}
Voici la sortie:
{Andrew Arnold=1298, Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178} 2178 1877 null vrai faux [Andrew Arnold, Ivy Briggs, Ricky McBright, Johnny Walker] [1298, 1877, 2001, 2178] 4 { Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178}
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION