TreeMap en français

Qu'est-ce qu'un TreeMap ?

Un TreeMap est une implémentation de l'interface Map qui stocke des éléments sous forme de paires clé-valeur. Ce type de structure permet de trier les éléments soit par l'ordre naturel des clés, soit à l'aide d'un Comparator. Contrairement à un HashMap qui utilise un tableau de hachage pour stocker ses clés sous forme de hachages, un TreeMap utilise une structure d'arbre binaire, ayant au maximum deux nœuds enfants par nœud parent.

Bien que la structure d'un TreeMap soit plus organisée, cela a pour conséquence d'être généralement moins performant qu'un HashMap. Dans la notation Big-O, la plupart des opérations sur un HashMap sont effectuées en temps amorti O(1), ce qui le rend plus efficace en termes de temps. D'autre part, les opérations sur un TreeMap sont effectuées en O(log(n)) et il est souvent plus économe en espace grâce à son allocation dynamique de mémoire pour chaque valeur ajoutée.

Syntaxe

Pour utiliser un TreeMap, il faut d'abord l'importer, car il fait partie du package java.util. Voici la syntaxe de base pour initialiser un TreeMap :

import java.util.TreeMap;

TreeMap monTreeMap = new TreeMap();

Les types de données génériques pour KeyDataType et ValueDataType peuvent être identiques ou différents.

Accéder aux éléments

Les clés permettent d'identifier de manière unique chaque valeur dans un TreeMap, ce qui facilite le stockage et l'accès aux données. Prenons l'exemple suivant où les noms de cours sont les clés et les enseignants respectifs sont les valeurs accessibles via la méthode .get() :

import java.util.TreeMap;
public class Main {
    public static void main(String[] args) {
        TreeMap coursEnseignant = new TreeMap<>();
        // Ajouter des clés et valeurs (NomsCours, Enseignant)
        coursEnseignant.put("Histoire", "Ben");
        coursEnseignant.put("Mathématiques", "Jeanette");
        coursEnseignant.put("Physique", "Lily");
        System.out.println(coursEnseignant.get("Physique"));
        System.out.println(coursEnseignant.get("Histoire"));
    }
}

Ce code affiche :

Lily
Ben

Ajouter des éléments

Pour ajouter des éléments dans un TreeMap, on utilise la méthode .put(). Cette méthode prend deux paramètres : une clé et une valeur, et les enregistre comme une paire. Voici un exemple :

import java.util.TreeMap;
public class Main {
    public static void main(String[] args) {
        TreeMap coursEnseignant = new TreeMap<>();
        coursEnseignant.put("Histoire", "Ben");
        coursEnseignant.put("Mathématiques", "Jeanette");
        coursEnseignant.put("Physique", "Lily");
        System.out.println(coursEnseignant);
    }
}

L'affichage sera :

{Histoire=Ben, Mathématiques=Jeanette, Physique=Lily}

Supprimer des éléments

Pour retirer un élément d'un TreeMap, on utilise la méthode .remove(), qui prend une clé comme argument pour supprimer la paire clé-valeur correspondante :

import java.util.TreeMap;
public class Main {
    public static void main(String[] args) {
        TreeMap coursEnseignant = new TreeMap<>();
        coursEnseignant.put("Histoire", "Ben");
        coursEnseignant.put("Mathématiques", "Jeanette");
        coursEnseignant.put("Physique", "Lily");
        coursEnseignant.remove("Physique");
        System.out.println(coursEnseignant);
    }
}

Cet exemple affichera :

{Histoire=Ben, Mathématiques=Jeanette}

Supprimer tous les éléments

Il est aussi possible de vider complètement un TreeMap avec la méthode .clear() :

import java.util.TreeMap;
public class Main {
    public static void main(String[] args) {
        TreeMap coursEnseignant = new TreeMap<>();
        coursEnseignant.put("Histoire", "Ben");
        coursEnseignant.put("Mathématiques", "Jeanette");
        coursEnseignant.put("Physique", "Lily");
        coursEnseignant.clear();
        System.out.println(coursEnseignant);
    }
}

Le TreeMap sera vide après l'exécution et affichera :

{}

Parcourir un TreeMap

On peut parcourir un TreeMap en utilisant une boucle for-each. Les méthodes .keySet() et .values() permettent respectivement d'obtenir uniquement les clés ou uniquement les valeurs :

import java.util.TreeMap;
public class Main {
    public static void main(String[] args) {
        TreeMap coursEnseignant = new TreeMap<>();
        coursEnseignant.put("Histoire", "Ben");
        coursEnseignant.put("Mathématiques", "Jeanette");
        coursEnseignant.put("Physique", "Lily");
        System.out.println("Cours offerts dans notre institut :");
        for (String cours : coursEnseignant.keySet()) {
            System.out.println(cours);
        }
        System.out.println("\nEnseignants dans notre institut :");
        for (String enseignant : coursEnseignant.values()) {
            System.out.println(enseignant);
        }
    }
}

L'affichage sera :

Cours offerts dans notre institut :
Mathématiques
Histoire
Physique
Enseignants dans notre institut :
Jeanette
Ben
Lily