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

avec Java Discussion :

LinkedList<Maclasse>, liste1.removeAll(liste2), pas d'appel à equals


Sujet :

avec Java

  1. #1
    Invité
    Invité(e)
    Par défaut LinkedList<Maclasse>, liste1.removeAll(liste2), pas d'appel à equals
    Bonjour,

    J'ai un petit probleme avec les listes chainées et la fonction removeAll :

    1) je crée une classe dont je redéfinis la fonction equals
    2) je crée deux listes chainees de ce nouveau type
    3) je remplis ces deux listes avec les mêmes valeurs
    4) j'utilise removeAll pour supprimer dans la 1ère liste les éléments communs aux deux listes

    Le problème est que la 1ère liste reste intacte. La fonction equals de ma classe n'est même pas invoquée, du coup la comparaison doit se faire avec ==.

    De plus je ne trouve pas beaucoup d'aide dans la documentation :
    - http://java.sun.com/javase/6/docs/ap...inkedList.html
    - http://java.sun.com/javase/6/docs/ap...il.Collection)

    Voici un exemple minimum de code dans lequel le problème survient :

    fichier Main.java
    Code java : 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
    import java.util.LinkedList;
     
    public class Main {
      public static void main(String[] arguments) {
        LinkedList<Entier> liste1 = new LinkedList<Entier>();
        liste1.add(new Entier(1));
        liste1.add(new Entier(2));
        liste1.add(new Entier(3));
        System.out.println("liste1 : "+liste1);
     
        LinkedList<Entier> liste2 = new LinkedList<Entier>();
        liste2.add(new Entier(1));
        liste2.add(new Entier(2));
        liste2.add(new Entier(3));
        System.out.println("liste2 : "+liste2);
     
        liste1.removeAll(liste2);
     
        System.out.println("liste1.removeAll(liste2) : "+liste1);
      }
    }

    fichier Entier.java
    Code java : 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
    public class Entier {
      public int a;
     
      public Entier(int a) {
        this.a = a;
      }
     
      public boolean equals(Entier entier) {
        System.out.println("equals invoqué");
        return a == entier.a;
      }
     
      public String toString() {
        return a+"";
      }
    }

    Quelqu'un connait la fonction de la classe Entier qu'il faut redéfinir ?

    Merci d'avance pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    J'ai trouvé la réponse. Il faut redéfinir la fonction equals de la classe Entier comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      public boolean equals(Object object) {
        System.out.println("equals invoqué");
        return object instanceof Entier && ((Entier)object).a == this.a;
      }
    J'ai essayé au pif et ça à marché

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 562
    Points : 21 625
    Points
    21 625
    Par défaut
    De fait, comme la méthode equals a pour signature equals(Object), pour la redéfinir il faut redéfinir equals(Object). C'est toujours comme ça.

    Une List quelconque n'a aucune raison d'aller chercher une méthode equals(Entier) dont elle ne connaît même pas l'existence.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/02/2009, 05h47
  2. Réponses: 1
    Dernier message: 22/11/2008, 17h00
  3. Coinitialize n'a pas été appelé
    Par nazimb dans le forum Bases de données
    Réponses: 6
    Dernier message: 20/04/2007, 15h39
  4. classement en sql (enfin je ne sais pas comment appeler)
    Par shirya dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/09/2005, 08h29
  5. Pas d'appel à une fonction si mode Release
    Par Crisanar dans le forum C++
    Réponses: 8
    Dernier message: 17/09/2005, 04h54

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