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 :

Petite question existentielle (hum hum)


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Emplyst
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Par défaut Petite question existentielle (hum hum)
    Bon lundi a vous!
    Voila en lisant mon livre en ce beau lundi matin dans mon cubicule une question existentielle m'est venu a l'esprit.

    Hormis quelques differences tel que la comparaison avec null, quel est l'utilite de faire un .equal alors qu'un .hashCode revient au meme.

    Donc la question est equal ou hashCode ou tous deux, la est la question.

    (Aportez quelques arguments je suis pas trop fan des axiomes )

  2. #2
    Membre expérimenté
    Inscrit en
    Juillet 2004
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 152
    Par défaut
    Citation Envoyé par Emplyst
    quel est l'utilite de faire un .equal alors qu'un .hashCode revient au meme.
    Faux...
    a.equals(b) == true implique a.hashCode() == b.hashCode() mais la réciproque n'est pas vraie.

    Et rien n'empeche d'avoir a.equals(b) == false et a.hashCode() == b.hashCode()

  3. #3
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Si ça peut d'aider dans ton dileme, la doc de la méthode equals() nous dit :
    Citation Envoyé par javadoc
    Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  4. #4
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    Bonjour

    Trouvé dans la Javadoc de hashCode :

    Citation Envoyé par javadoc
    It is not required that if two objects are unequal according to the equals(java.lang.Object) method, then calling the hashCode method on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hashtables.
    [edit]
    en gros deux objets dont la méthode equals retourne false peuvent avoir la même valeur pour hashCode
    [/edit]

    et voilà

  5. #5
    Membre confirmé Avatar de Emplyst
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Par défaut
    en gros deux objets dont la méthode equals retourne false peuvent avoir la même valeur pour hashCode
    Mouais d'accord mais je vois mal l'interet :]

    Bref merci a vous tous, disons que l'aspect le plus interessant dans toutes les reponses recue est ce passage :
    "However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hashtables."

    Encore une fois merci de la rapidite de vos reponses!

  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
    Salut,

    Citation Envoyé par Emplyst
    en gros deux objets dont la méthode equals retourne false peuvent avoir la même valeur pour hashCode
    Mouais d'accord mais je vois mal l'interet :]
    Tout simplement parce que la méthode hashcode() renvoit un int, et que tu ne peux pas forcément représenter toutes les valeurs possibles...

    Les int peuvent prendre les valeurs allant de Integer.MIN_VALUE à Integer.MAX_VALUE (soit -2147483648 à 2147483647), soit un peu plus de quattre milliard de valeurs. Or si tu prend le cas des String, tu as un nombre infini de possibilitée (il suffit d'ajouter une lettre pour créer une nouvelle chaine différente).

    Tu ne peux donc pas forcément utiliser un int pour représenter ton objet de manière unique. Et c'est d'autant plus vrai si ton objet contient un grand nombre d'attribut à prendre en compte...

    Citation Envoyé par Emplyst
    Bref merci a vous tous, disons que l'aspect le plus interessant dans toutes les reponses recue est ce passage :
    "However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hashtables."
    Disons que ceci est vrai dans le meilleure des mondes... mais il ne faut pas prendre cela pour une réalité ou un objectif à atteindre.

    Il faut bien se souvenir que l'unique objectif des hashCode() est d'améliorer le stockage dans les tables de hashage, et en aucun cas de garantir l'égalité de deux objets...

    a++

  7. #7
    Membre confirmé Avatar de Emplyst
    Inscrit en
    Mars 2006
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 152
    Par défaut
    Merdi adiGuba cette reponse viens combler ma soif de savoir

  8. #8
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    bonjour,

    je viens de faire quelques tests suite aux posts precedents sur la methode equals, et je viens de m'apercevoir que lorsque je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MyObject obj1 = new MyObject();
    MyObject obj2 = new MyObject();
     
    obj1 == obj2
    je ne passe jamais dans la méthode "equals" (que j'ai surchargé bien comme il faut normalement)...
    Je croyais que cette méthode opérait comme une surcharge d'operateur ?(comme en C++ par exemple)

    Est-ce que je fais une boulette ou est-ce normal ?

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

Discussions similaires

  1. [Visuel XP] Petite question sur le theme XP...
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 12
    Dernier message: 20/01/2005, 14h41
  2. [CR8.5] petite question ..
    Par mcrocher dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 13/09/2004, 15h04
  3. Une petite question
    Par Etienne1 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/08/2004, 16h19
  4. [FOREIGN KEY] petite question bete ...
    Par dzincou dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 16h35
  5. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49

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