Tableaux associatifs


Lecture : section 8 du chapitre 22 de "Programmer en Java".

Description

Les tableaux associatifs, ou tables d'association, (souvent appelés tables de hachage ou hachages par abus de langage, ou encore dictionnaires en Python) sont des collections de couples (clé, valeur).
En Java, les clés et les valeurs sont typées (les clés et les valeurs pouvant être de même type ou de types différents). Par abus de langage (encore !), on pourra dire qu'un tableau associatif est non typé quand les clés et les valeurs sont de type Object.

API : la classe HashMap

Il existe plusieurs implémentations qui mettent en œuvre des tableaux associatifs. Nous décrivons ci-dessous la classe HashMap de l'API (paquet : java.util).
Vous pourrez également regarder la classe Properties, qui étend HashMap. Cette classe est destinée à stocker des couples de type (String, String) et elle est dotée de méthodes pour sauvegarder l'ensemble de ces couples dans un fichier, ou restaurer les valeurs de ces couples par lecture d'un fichier (on s'en sert notamment pour lire/écrire des fichiers de configuration).

Import du paquet correspondant

      import java.util.HashMap;
ou, si vous devez importer également les classes Iterator, ArrayList, etc. :
      import java.util.*;

Construction

L'instanciation d'une HashMap ressemble à celle d'un ArrayList, à la différence que l'on précise entre chevrons le type des clés en plus de celui des valeurs :
      HashMap<Object, Object> hMap = new HashMap<Object, Object>();
      HashMap<String, Object> hMap2 = new HashMap<String, Object>();
      HashMap<Token, Integer> hMap3 = new HashMap<Token, Integer>();
    
Note : dans des versions antérieures de Java (avant les types génériques), on écrivait :
      HashMap hMap = new HashMap();
Cela correspondait à ce que l'on écrirait aujourd'hui :
      HashMap<Object, Object> hMap = new HashMap<Object, Object>();

Utilisation : ajout/consultation de données

Utilisation : parcours



Autres implémentations

La classe TreeSet a les mêmes fonctionnalités que la classe HashMap. Elle est plus « efficace » en termes de temps d'accès aux valeurs car celles-ci sont rangées (sous forme d'arbre) dans un ordre particulier, selon la valeur des clés. Cela implique que le type des clés implémente l'interface Comparator<T>, (du paquet java.util). C'est le cas par exemple des types primitifs ou de certaines classes de l'API. Vous pouvez donc utiliser un TreeSet à la place d'une HashMap si vos clés sont de type Strint, int, ou n'importe quelle classe qui implémente cette interface.



Retour page séance 8 ]

Mention légale ]