Dictionnary, Map.

Besoin

Associer des valeurs à des clés.

Analyse

Un dictionnaire associe une valeur unique à une clé unique.

Conception

Des dictionnaires peuvent être réalisés au travers de :

Implémentation

En Java les dictionnaires sont représentés par des classes implémentant java.util.Map. fournissant un accès à :

  • leur clés uniques : Set keySet()
  • les valeurs associées à ces clés : Collection values()

L'obtention de la valeur d'une clé étant obtenue via myValue = myMap.get (myKey)

Les clés et valeurs étant des collection, on peut itérer sur chacune d'entre elles. Cependant, si l'on souhaite effectuer un traitement sur chaque couple clé-valeur, il est plus efficace d'itérer sur les entrées (Set entrySet()) du tableau de hâchage et travailler sur le couple clé-valeur (Map.Entry) plutôt que de rechercher à chaque itération la valeur de chaque clé :

Iterator mapEntriesIterator = myMap.entrySet().iterator();
while (mapEntriesIterator.hasNext()) {
  Map.Entry mapEntry = (Map.Entry) mapEntriesIterator.next();
  Object entryKey = mapEntry.getKey();
  Object entryValue = mapEntry.getValue();
}

Exemples

Implémentations de Map Commentaire
Tableau de hâchage Arbre équilibré Tableau de hachâge + liste chaînée
Type Hashtable HashMap TreeMap LinkedHashMap
Triable Non Oui
Synchronisé Oui Non Non Non La synchronisation permet à un dictionnaire d'être thread-safe (toujours cohérent en contexte multi-thread). Par contre les dictionnaire non synchronisés sont plus rapides, et donc plus avantageux dans des contextes mono-thread.
Clés nulles possibles Non Oui Dépend du comparateur
Valeurs nulles possibles Non Oui
Trié Non Non Oui Non
Commentaire < J2SE 1.2
Coût accès log(n)

Des exemples de dictionnaires sont :

  • les en-têtes HTTP
  • en Java
    • les fichiers Properties
      • les propriétés système
      • les RessourceBundles

Notes