Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1917 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Java] Problème de conception d'une classe GraphMap

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java] Problème de conception d'une classe GraphMap

n°870040
Giz
Posté le 11-10-2004 à 14:00:08  profilanswer
 


Voilà  je voudrais me coder une classe nommée "GraphMap". Bon j'ai commencé à  faire tout ça mais je finis par être bloqué vis à  vis de ma conception par rapport aux services que je veux qu'offre cette classe.
Bon tout de suite pour être clair, je cherche ni plus ni moins à  me coder une classe qui représente des graphes. Au passage je trouve cela bizarre que la librairie standard de Java ne propose pas cette structure de donnée.
J'ai decidé de partir dans un 1er temps sur une réprésentation basée sur un mappage clé/valeur dans un graphe orienté
Par conséquent, j'ai choisi d'utiliser la structure directement sous jacente un TreeMap.
En gros, la clé du TreeMap est le noeud source; la valeur serait un autre TreeMap (appelons le TreeMap2). Cela veut dire que chaque noeud du TreeMap contiennent un TreeMap2 comme valeur. Ce TreeMap2 a pour clé le noeud destination et pour valeur la donnée utilisateur associée a la relation (qu'on peut assimiler au poids de l'arc).
 
Bref, après ces présentations, je rentre dans le vif du sujet : je souhaiterais effectuer les opérations suivantes :
- Renvoyer tous les noeuds N dont le noeud n est le noeud source (et donc N les noeuds destinations). Un prototype de fonction adapté serait :
Set<K> keySet (K key, boolean isLeftKey);
avec
@key : une clé
@isLeftKey : si true, spécifie que key est la clé source (cad a gauche dans un couple de relation)
si false, spécifie que key est la clé destination (cad a droite dans un couple de relation)
@La fonction renverrait le Set de clé : ou bien toutes celles de droite dans le couple (si isLeftKey == true), ou bien toutes celles de gauche dans le couple (si isLeftKey == false)
 
Bon supposons que dans un appel a keySet, isLeftKey vaut true; pour mener a bien cette fonction, vous allez me dire rien de plus fastoche : un petit appel a la fonction keySet sur le TreeMap2 venant du noeud source key !...et vous avez raison !
Le problème commence si isLeftKey vaut false. Admettons que je parcours tout l'arbre(=TreeMap) pour regarder dans chacun des sous arbres (=TreeMap2) si key est présent ; (et si oui, je rajoute la clé de TreeMap dans un set ; sinon non)
Cela m'amène à  la question:
 
Comment faire pour que le set renvoyé soit "synchronisé" avec le graph ? (de la même façon que la fonction keySet () dans TreeMap le fait!) cad que la suppression par l'utilisateur d'un element dans le set supprime automatiquement cet element dans le graphe et vice-versa.
La classe TreeMap a dc cette fonction keySet () synchronisée sur l'arbre. Et pourtant, l'interface Set n'est jamais implemente par cette classe (et par ses super classes). J'imagine que pour renvoyer un Set, ils copient tous les noeuds dans un TreeSet par exemple, mais celui-ci comment serait synchronisé sur le TreeMap de départ ?
 
Dans un main quand je fais :

Code :
  1. TreeMap tree = new TreeMap ();
  2. Set set = tree.keySet ();
  3. System.out.println ("class : " + set.getClass().getName());


 
la sortie est :
 
class : java.util.TreeMap$1 ... or TreeMap n'implemente jamais l'interface Set ! donc le set ne peut venir d'un TreeMap. En plus dans la librairie ils distinguent bien les classes de mappage (clé/valeur) des classes d'ensemble (o๠la valeur est a la fois la clé). Comment cela se fait-il ?

mood
Publicité
Posté le 11-10-2004 à 14:00:08  profilanswer
 

n°870209
benou
Posté le 11-10-2004 à 15:35:17  profilanswer
 

j'ai pas tout lu (désolé), je réponds juste à la dernière question.
La classe retournée par keySet() est de type java.util.TreeMap$1, mais c'est c'est pas le même type que TreeMap : la différence est le $1 final.
 
En fait, c'est réellement un Set (d'ailleur si c'était pas le cas, ton prog ne compilerait pas), mais déclaré dans le fichier TreeMap.java comme class anonyme (aucun nom ne lui est donné) => à la compilation, un nom lui est attribué : TreeMap$1.


---------------
ma vie, mon oeuvre - HomePlayer
n°870221
Giz
Posté le 11-10-2004 à 15:42:33  profilanswer
 

benou a écrit :

j'ai pas tout lu (désolé), je réponds juste à la dernière question.
La classe retournée par keySet() est de type java.util.TreeMap$1, mais c'est c'est pas le même type que TreeMap : la différence est le $1 final.
 
En fait, c'est réellement un Set (d'ailleur si c'était pas le cas, ton prog ne compilerait pas), mais déclaré dans le fichier TreeMap.java comme class anonyme (aucun nom ne lui est donné) => à la compilation, un nom lui est attribué : TreeMap$1.


 
OK, Merci :) mais tu peux détaillé cette histoire de classe anonyme ? par rapport a un import c'est quoi ?. Sinon, ce qui me tracasse vraiment c'est comment font-ils la synchronisation entre le set et le TreeMap lorsque l'utilisateur appelle la fonction keySet() dans la classe TreeMap. J'aimerais bien faire pareil moi  :sweat:

n°871899
benou
Posté le 12-10-2004 à 21:49:56  profilanswer
 

le plus simple c'est que t'aille voir le code de TreeMap ... tu auras la réponse à toute tes questions.
 
une class anonyme c'est un truc dans le genre : (exemple avec comparator)

Code :
  1. Collections.sort(aList, new Comparator() {
  2.    public int compareTo(Object o) {
  3.       return blablabla;
  4.    }
  5. });


 
là y a une classe qui est crée, elle implémente Comparator, mais elle n'a pas de nom => le nom du fichier class sera LeNomDeLaClasseDansLaquelleOnEst$1  ou $2 etc., si y a d'autres classes anonymes dans la classe


Message édité par benou le 12-10-2004 à 21:50:28

---------------
ma vie, mon oeuvre - HomePlayer
n°872149
Giz
Posté le 13-10-2004 à 09:40:40  profilanswer
 

effectivement c'est ce que j'ai fini par pensé.
Merci.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Java] Problème de conception d'une classe GraphMap

 

Sujets relatifs
Problème avec la classe vectorprobleme d'un débutant avec la focntion mail()
Une interrogation sur les langages interprétés et java[MYSQL]probleme requete imbriquée
java xml et parser saxprobleme avec un if[RESOLU]
[C] problème de boucleproblème dans un prog
probleme javascript et firmulaire 
Plus de sujets relatifs à : [Java] Problème de conception d'une classe GraphMap


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR