web-dev-qa-db-fra.com

Pourquoi et quand utiliser TreeMap

Quelqu'un pourrait-il me dire quand et pourquoi utiliser [~ # ~] treemap [~ # ~] . J'ai parcouru Ce lien = mais n'a pas trouvé ma réponse.

Selon ma pensée, nous utilisons treemap pour obtenir le tri des données en fonction de votre clé et la même chose que nous pouvons également réaliser par d'autres moyens.

21
Java_Alert

Supposons que vous souhaitiez implémenter un dictionnaire et l'imprimer par ordre alphabétique, vous pouvez utiliser une combinaison d'un TreeMap et d'un TreeSet:

public static void main(String args[]) {
    Map<String, Set<String>> dictionary = new TreeMap<>();
    Set<String> a = new TreeSet<>(Arrays.asList("Actual", "Arrival", "Actuary"));
    Set<String> b = new TreeSet<>(Arrays.asList("Bump", "Bravo", "Basic"));

    dictionary.put("B", b);
    dictionary.put("A", a);

    System.out.println(dictionary);
}

Tout le tri se fait automatiquement et il imprime:

{A = [Actuel, Actuaire, Arrivée], B = [Basique, Bravo, Bump]}

Bien sûr, vous auriez pu également trier les structures manuellement, mais l'utilisation de TreeMap/Set peut être plus efficace, réduit le nombre de lignes de code (= le nombre de bogues) et est plus lisible.

24
assylias

Le javadoc auquel vous vous connectez indique clairement qu'il s'agit d'une implémentation des interfaces de carte navigable et sorted . Vous l'utiliseriez lorsque vous aurez besoin de cette fonctionnalité.

6
David Soroko

C'est un moyen efficace de trier les objets par une clé. Si l'accès aléatoire est également important pour vous, alors TreeMap est la réponse. Avec cette structure de données, vous pouvez répéter dans l'ordre.

Si l'accès aléatoire n'est pas nécessaire, utilisez plutôt un ensemble/sac ou une liste triés.

Pourquoi n'y a-t-il pas de SortedList en Java?

6
Aleksander Gralak

TreeMap

Une implémentation NavigableMap basée sur un arbre rouge-noir. La carte est triée selon l'ordre naturel de ses clés, ou par un comparateur fourni au moment de la création de la carte, selon le constructeur utilisé.

Cette implémentation garantit un coût en temps log (n) garanti pour les opérations containsKey, get, put et remove. Les algorithmes sont des adaptations de ceux de l'introduction aux algorithmes de Cormen, Leiserson et Rivest.

Utilisez cette structure de données lorsque vous avez besoin d'une clé ordonnée non seulement ascendante, vous pouvez passer comparator au constructeur TreeMap(Comparator<? super K> comparator) pour écrire votre propre logique de tri. Il s'agit également d'un type d'arbre de recherche binaire à équilibrage automatique.

4