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

Langage Java Discussion :

Suppression dans une LinkedList


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de GDMINFO
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 350
    Par défaut Suppression dans une LinkedList
    Bonjour,
    j'ai déjà eu des soucis avec la méthode remove() de la classe LinkedList et grâce à des personnes de ce forum j'ai tout réglé en redéfinissant la méthode equals() dans la classe des éléments de ma liste. Seulement voilà, si à un endroit de mon code tout fonctionne parfaitement, plus loin (alors qu'il s'agit d'une LinkedList contenant des éléments de même type que précédemment, en l'occurence des ModuleTree) j'ai la même erreur que la première fois, à savoir il ne supprime rien du tout.
    A quoi peut être dû cette différence pour le moins étrange ?

    voici le premier endroit où j'utilise remove() et où tout fonctionne :
    ModuleTree Mr2 = TmSauve.MTmod(rI);
    ModuleTree Ntemp = (ModuleTree) MtN.clone();
    LinkedList EnfantN = (LinkedList) Ntemp.getChildren().clone();
    EnfantN.remove(Mr2);
    et voici le second qui ne supprime rien de la liste :
    ModuleTree MtNTh = Th.MT(N,"P").clone();
    ModuleTree pereMtNTh = Th.pere(MtNTh);
    LinkedList enfantsMtNThP = (LinkedList) pereMtNTh.getChildren().clone();
    enfantsMtNThP.remove(MtNTh);
    Il est bien entendu que j'ai vérifié ce que renvoyait chaque sous fonction utilisée. MtNTh contient bien un ModuleTree présent dans la liste.

    Merci de votre aide.

  2. #2
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    As-tu redéfini la méthode hashCode() ? En général, il est conseillé quand on redéfinit equals(Object o) de redéfinir hashCode() pour que deux objets égaux au sens de equals aient le même hashCode...

  3. #3
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Pourquoi tu fais des clone() à tout va?

  4. #4
    Membre éclairé Avatar de GDMINFO
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 350
    Par défaut
    chtig : As-tu redéfini la méthode hashCode() ? En général, il est conseillé quand on redéfinit equals(Object o) de redéfinir hashCode() pour que deux objets égaux au sens de equals aient le même hashCode...
    Non, j'avoue que je n'ai pas redéfini hashcode, ça me paraissait un peu compliqué... mais je vais essayer.

    ®om : Pourquoi tu fais des clone() à tout va?
    Je pensais que c'était mieux pour éviter les problèmes avec les références... Ca n'est pas utile ?

  5. #5
    Membre éclairé Avatar de GDMINFO
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 350
    Par défaut
    Redéfinir la méthode hashcode() ne donne rien...

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par GDMINFO
    Non, j'avoue que je n'ai pas redéfini hashcode, ça me paraissait un peu compliqué... mais je vais essayer.
    Les spécifications de equals() et de hashCode() sont fortement lié, et ces deux méthodes doivent toujours être cohérentes...

    L'implémentation de hashCode() nest pas très difficile : Pourquoi et comment redéfinir la méthode hashCode() ?

    Toutefois cela ne devrait pas avoir d'impact sur les LinkedList...


    Citation Envoyé par GDMINFO
    Je pensais que c'était mieux pour éviter les problèmes avec les références... Ca n'est pas utile ?
    Quels problèmes avec les références ???? Clone() sert à dupliquer l'objet en mémoire...




    Il faudrait également voir le code de tes méthodes equals() et clone(), ainsi que l'objectif exacte de ce bout de code...

    a++

  7. #7
    Membre éclairé Avatar de GDMINFO
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 350
    Par défaut
    J'étais en train de répondre et puis j'ai essayé d'enlever tous les clone()... ça marche !
    Pourquoi ?

    Ma méthode clone() est :
    public ModuleTree clone(){
    ModuleTree clone = new ModuleTree();
    clone.setLeaf(this.leaf);
    for(Iterator it = this.getChildren().iterator();it.hasNext(){
    ModuleTree m = (ModuleTree) it.next();
    clone.addChild(m);
    }
    clone.setLabel(this.getLabel());
    clone.representant = (Vertex) this.getRepresentant().clone();
    et les attributs de ma classe ModuleTree sont :
    boolean leaf = false;
    LinkedList children=new LinkedList();
    String label="";
    Vertex representant=null;
    Mais ma plus grande interrogation reste que la suppression d'un ModuleTree d'une LinkedList dans un autre contexte (voir message 1) fonctionne très bien (il y a des clone() aussi)...

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

Discussions similaires

  1. Suppression dans une Procédure Stockée
    Par softflower dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/12/2005, 15h15
  2. [Jtable] problème de suppression dans une Jtable
    Par gianni17 dans le forum Composants
    Réponses: 1
    Dernier message: 02/12/2005, 18h36
  3. Problème de suppression dans une table
    Par Splinter dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/10/2005, 10h55
  4. Combler les trous lors d'une suppression dans une table
    Par Billybongjoe dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 08/04/2004, 14h02
  5. [LG]suppression dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 9
    Dernier message: 16/12/2003, 21h20

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