IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

[TreeSet][Conseil][XML] Récupérer un objet


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre éclairé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Par défaut [TreeSet][Conseil][XML] Récupérer un objet
    Bonjour tout le monde.

    Je suppose que j'ai pas du finir de cuver mon réveillon, car je n'arrive pas à trouver de méhode pour récupérer un, et un seul objet dans mon Treeset.
    il y a une méthode contains, une méthode remove, une méthode add, mais pas de méthode get !!!!
    Est-ce que la solution consiste à passer par un subSet auquel on fournirai en paramètre 2 fois le même objet ?
    Ou est-ce que je n'ai aucun intérêt à utiliser le TreeSet et je ferais mieux de me tourner vers un autre ensemble, voir un Arraylist.

    La dernière question étant un rien subjective, je précise mon problème :
    Je parse un fichier Excel, afin de créer un flux XML. Dans ce dernier, je peux avoir des branches et des feuilles. Si une information concernant la branche n'est pas renseignée dans le fichier Excel, alors j'enregistre une référence vers cette branche et l'élément qui n'est pas renseigné, pour pouvoir la remplir plus tard. Pour des questions pratique, j'ai créé un objet qui contient une référence vers la branche, ainsi que vers chacun de ses éléments non renseignés. Mais je ne connais pas à l'avance toutes les références manquantes, donc je voudrais ajouter ma branche dans le TreeSet et ensuite, si je trouve une nouvelle référence non renseignée, je récupère dans le TreeSet mon abjet contenant la branche et je lui ajoute une référence sur l'attribut manquant.


    Bref, j'ai besoin de pouvoir récupérer des objets dans un ensemble ordonné, n'autorisant pas les doublons.

  2. #2
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Il faut passer par un iterator pour explorer un Set. Tu as la méthode iterator().
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Membre éclairé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Par défaut
    Oui, j'ai vu.
    Mais en fait j'ai trouvé ça un peu décevant... (mais non, je ne critique pas !)

    J'avoues ne pas m'être penché sur les iterator depuis quelque temps, mais pour autant que je me souvienne, c'est un accès séquentiel sur les données.
    Quel est l'intérêt de se limiter à un accès séquentiel sur une collection aussi évoluée que le TreeSet ! Il trie "tout seul" des objets, refuse les doublons, et n'accepte pas les accès direct ?

  4. #4
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Eh, non, c'est ce qui définit l'interface Set. On y accède par un iterator. J'avoue qu'en y réfléchissant c'est en effet absurde, car pour garantir un add() en log(n), la classe doit travailler en accès direct.

    Si tu veux faire de l'accès direct, il faut utiliser une liste.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  5. #5
    Membre éclairé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Par défaut
    Hum... c'est ce que j'étais en train de regarder, mais je me perds un peu dans mes recherche.
    Je suis surpris de ne pas trouver de getters sur les list ou les set qui travaille directement avec des objets !
    Je n'ai pas envie d'utiliser une Map, car je n'ai aucun intérêt à faire du mapping, et vu que je commence à avoir une appli très gourmande en mémoire, je n'ai pas envie d'en perdre encore un peu plus dans un mapping inutile.
    Ce que je souhaitais faire c'était simplement de stocker des objets "quelque part" (dans une liste disons) et pouvoir y accéder via leur référence.

    Je vais peut-être me pencher plus sérieusement sur les map, et trouver quelque chose de concret sur leurs occupations mémoires.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 109
    Par défaut
    Mais quel paramètre voudrais-tu passer à une éventuelle méthode get d'un Set ???

    Si tu recherches une List avec unicité des éléments, de mémoire, il y en a dans les jakarta common collections.

  7. #7
    Membre éclairé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Par défaut
    Je voulais avoir un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    TreeSet emptyElements = new TreeSet();
    ...
    if(element.isNotFull){
        if(emptyElements.contains(element))
            tempElement=emptyElements.get(element);
        else
            tempElement=new EmptyElement(element);
     
        tempElement.add(causeConditionPremierIf);
     
        emptyElements.add(tempElement);
    }
    ...

  8. #8
    Membre éclairé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Par défaut
    Résultat, je m'y suis quand même pris avec un TreeSet, et j'ai fait le code suivant, si ça peut aider quelqu'un...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    TreeSet emptyElements = new TreeSet();
    ...
    EmptyElement tempElement = null;
    if(element.isNotFull){
        if(emptyElements.contains(element)){
            Iterator it=emptyElements.iterator();
     
    	     boolean isFound = false;
    	     while(it.hasNext() && !isFound){
    		      tempElement = (EmptyElement)it.next();
    		      if((tempElement.getElement()).equals(leaf.getChild(ATTRIBUTE))){
    			     isFound=true;
    		      }
    	     }
        }else
            tempElement=new EmptyElement(element);
     
        tempElement.add(causeConditionPremierIf);
     
        emptyElements.add(tempElement);
    }
    ...
    Voilà, et puis merci encore pour votre temps et votre aide.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 109
    Par défaut
    Citation Envoyé par leminipouce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        if(emptyElements.contains(element))
            tempElement=emptyElements.get(element);
    j'ai peut être loupé un truc mais je ne vois pas l'intérêt de la seconde ligne : tu as déjà une référence sur ton objet, il me semble donc que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(emptyElements.contains(element)) {
            tempElement = element;
    }
    ...
    suffise amplement. c'est bien pour celà qu'il n'y a pas de méthode get dans l'interface Set

  10. #10
    Membre éclairé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Par défaut
    Voilà, c'est exactement ça !!!

    Tu as complètement raison. Ce genre de getter ne sert absolument à rien.

    La ou je me suis un peu perdu dans ma réflexion, c'est qu'en fait, il me faudrait un getter très spécifique, puisque je lui passerai un élément pour qu'il me renvoie un EmptyElement. Et vu que le second contient le premier, je me suis sun peu embrouillé.

    Donc dans mon cas, la map semble tout à fait approprié. Le problème : j'ai pas envie de l'utiliser ! Soit je duplique des élements, soit je n'en passe "qu'un bout" auquel cas je serai toujours en train d'appeler des accesseurs sur les éléments à chercher !

    Je reste donc sur l'idée initiale : les iterator.

    Merci quand même, et spécialement au MangeurVasqué pour sa lanterne dans l'obscurité de mon cerveau.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JComboBox] Récupérer l'objet sélectionné
    Par Terminator dans le forum Composants
    Réponses: 3
    Dernier message: 14/09/2005, 12h29
  2. Récupérer un objet d'une liste déroulante
    Par Hell dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/01/2005, 14h59
  3. [servlet][bean]comment récupérer l'objet request
    Par otminou dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 27/09/2004, 14h40
  4. Réponses: 4
    Dernier message: 15/09/2004, 16h52
  5. [xml] Récupérer le numéro de la ligne d'erreur d'un fichier
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 7
    Dernier message: 20/03/2004, 19h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo