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] Question sur la méthode contains


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 153
    Points : 59
    Points
    59
    Par défaut [linkedlist] Question sur la méthode contains
    Salut,
    Je suis en train de travailler avec les listes, surtout j'ai une doute avec la méthode contains

    Imaginons que j'ai une classe Section

    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
    public class Section {
    	String sectionName;
     
    	Section(String text){
    		sectionName=text;
     
    	}
    	//Method to add command lines
     
    	public boolean equals(Section sectionToCompare){
    		if (this.sectionName.equals(sectionToCompare.sectionName)){
    		return true;}else{
    			return false;
    		}
    	}
     
    }
    Dans cette class j'ai défini la méthode "equals" pour utiliser après dans mes listes

    Maintenant je défini la classe SectionList

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    import java.util.LinkedList;
     
     
    public class SectionsList extends LinkedList<Section> {
     
    }
    C'est donc une liste qui contient des sections

    Maintenant je veux tester la méthode contains

    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
    23
     
    public class Test {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    Section section1=new Section("[BLOC]");
    Section section2=new Section("[BLOC]");
    SectionsList mylist = new SectionsList();
    mylist.add(section1);
     
    if (mylist.contains(section2)){
    	System.out.println("ok");
    }else{
    	System.out.print("Not OK");
     
     
    }
    	}
     
    }
    Le résultat donc "Not OK" ça veut dire que le test dit qu'il n'y a pas de section2 dans ma liste tandis que la section1 est déjà dans la liste et que section1=section2 selon ma méthode "equals" déjà défini

    Où est le problème dans ma raisonnement?

  2. #2
    Membre éclairé Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Points : 718
    Points
    718
    Par défaut
    Tu ne surcharges pas la méthode equals, c'est donc l'implémentation de la classe Object qui est utilisée.

    Sa signature est public boolean equals(Object obj)

    De plus, la surcharge de la méthode equals va de pair avec celle de la methode hashcode.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 153
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par Heimdal Voir le message
    Tu ne surcharges pas la méthode equals, c'est donc l'implémentation de la classe Object qui est utilisée.

    Sa signature est public boolean equals(Object obj)

    De plus, la surcharge de la méthode equals va de pair avec celle de la methode hashcode.
    S'il te plait, peux tu détailler la réponse? C'est quoi la différence entre surcharger une méthode et implémenter une méthode?
    Et dans mon cas il faut faire quoi?

  4. #4
    Membre éclairé Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Points : 718
    Points
    718
    Par défaut
    Implémenter une méthode, c'est fournir l'implémentation d'une méthode abstraite (methode d'interface ou abstract).
    Surcharger une méthode c'est réécrire l'implémentation d'une méthode héritée. Dans ton cas public boolean equals(Object obj) de la classe Object.

    Il faut que la signature soit exactement la même. Ça donne plutôt un truc comme ça

    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
    23
    24
    25
    26
    27
     
    public class Section {
    	String sectionName;
     
    	Section(String text) {
    		if(text == null) {
    			throw new IllegalArgumentException("Je ne veux pas de null");
    		}
    		sectionName = text;
    	}
     
    	@Override
    	public boolean equals(Object sectionToCompare) {
    		if (sectionToCompare instanceof Section && sectionToCompare != null) {
    			return this.sectionName
    					.equals(((Section) sectionToCompare).sectionName);
    		} else {
    			return false;
    		}
    	}
     
    	@Override
    	public int hashCode() {
    		return sectionName.hashCode();
    	}
     
    }

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 153
    Points : 59
    Points
    59
    Par défaut
    Merci de ta réponse, déjà ton code fonctionne comme je veux.
    Mais peux tu m'expliquer à quoi sert ta fonction hashCode? Peux je ne pas inclure dans mes fonctions?
    Merci

  6. #6
    Membre éclairé Avatar de Heimdal
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 549
    Points : 718
    Points
    718

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 153
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par Heimdal Voir le message
    Merci!

Discussions similaires

  1. question sur la méthode paint()
    Par Invité dans le forum 2D
    Réponses: 8
    Dernier message: 30/11/2008, 13h18
  2. [c#][Question sur la méthode ReadToEnd()]
    Par cescu dans le forum C#
    Réponses: 4
    Dernier message: 17/11/2008, 10h00
  3. Question sur la méthode extends
    Par Djule dans le forum Langage
    Réponses: 4
    Dernier message: 04/02/2007, 17h01
  4. Question sur les méthodes abstraites
    Par nmathon dans le forum Delphi
    Réponses: 3
    Dernier message: 15/06/2006, 21h30
  5. [WebServices][axis] question sur la méthode service()
    Par Nycos62 dans le forum Services Web
    Réponses: 9
    Dernier message: 21/04/2005, 10h32

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