Structure Arbres Java
Résolu/Fermé
A voir également:
- Structure Arbres Java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Java décompiler - Télécharger - Langages
- Java runtime - Télécharger - Langages
1 réponse
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
23 févr. 2019 à 22:41
23 févr. 2019 à 22:41
Bonjour,
Comme son nom l'indique TreeMap est un arbre, certes, mais c'est surtout une Map, donc forcément avec le même système de clé/valeur que la HashMap ou toutes les autres Map.
De même pour le TreeSet, qui avant tout un Set, mais implémenté à partir d'un arbre.
Il faut distinguer, la structure de données d'une part et son utilisation d'autre part. Par exemple une ArrayList fonctionne comme une liste, même si sa structure de donnée est basée sur un tableau.
De ce que je comprends ce que tu veux c'est une utilisation de données arborescente (type arbre généalogique), mais la structure optimisée des arbres bicolores (comme le TreeMap) n'est pas faite pour ça car lorsque l'arbre s'équilibre (à chaque ajout/suppression), la hiérarchie parent/enfant est modifiée.
Dans l'API standard de Java, ce qui s'en rapprocherait le plus c'est JTree
https://docs.oracle.com/javase/tutorial/uiswing/components/tree.html
Mais ça peut être un peu lourd de travailler avec des éléments graphiques de Swing juste pour faire de la manipulation de données...
Éventuellement, tu peux utiliser une bibliothèque tierce de manipulation de graphes (un arbre est un cas particulier de graphe), par exemple GraphStream :
https://graphstream-project.org/doc/Tutorials/Getting-Started/
Comme son nom l'indique TreeMap est un arbre, certes, mais c'est surtout une Map, donc forcément avec le même système de clé/valeur que la HashMap ou toutes les autres Map.
De même pour le TreeSet, qui avant tout un Set, mais implémenté à partir d'un arbre.
Il faut distinguer, la structure de données d'une part et son utilisation d'autre part. Par exemple une ArrayList fonctionne comme une liste, même si sa structure de donnée est basée sur un tableau.
De ce que je comprends ce que tu veux c'est une utilisation de données arborescente (type arbre généalogique), mais la structure optimisée des arbres bicolores (comme le TreeMap) n'est pas faite pour ça car lorsque l'arbre s'équilibre (à chaque ajout/suppression), la hiérarchie parent/enfant est modifiée.
Dans l'API standard de Java, ce qui s'en rapprocherait le plus c'est JTree
https://docs.oracle.com/javase/tutorial/uiswing/components/tree.html
Mais ça peut être un peu lourd de travailler avec des éléments graphiques de Swing juste pour faire de la manipulation de données...
Éventuellement, tu peux utiliser une bibliothèque tierce de manipulation de graphes (un arbre est un cas particulier de graphe), par exemple GraphStream :
https://graphstream-project.org/doc/Tutorials/Getting-Started/
24 févr. 2019 à 15:23
Oui en effet c'est un arbre de type généalogique que je souhaites utiliser. J'ai pour l'instant écrit mes propres classes, mais la manière d'accéder aux parents est un peu redondante car je stocke les parents et les enfants, et de plus il est possible de faire des cycles, ce que je souhaite éviter.
J'ai regardé les 2 liens, et en effet le 1er a l'air très orienté visualisation graphique des arbres (je n'ai pas de partie graphique en l’occurrence pour ces arbres) que manipulation de données.
Je me penche sur GraphStream mais de ce que j'en voie il n'y a pas vraiment de "hiérarchie" père/fils, et la spécificité de ce que je voudrais faire est descendante (c'est des éléments accessibles en fonction de l'état des parents).
Cela doit probablement exister dans des implantations sur Internet mais je pensais trouver déjà qqch dans la Java doc....
24 févr. 2019 à 19:26
Pour GraphStream tu peux travailler avec des graphes orientés, les arcs représenteront donc ta hiérarchie.
Exemple :
Tu peux bien sûr faire ta propre classe d'arbre qui utilise GraphStream en interne mais avec des méthodes utilitaires qui font ce que tu veux.
Exemple :
25 févr. 2019 à 12:40