La méthode hashcode() [Résolu]

Messages postés
125
Date d'inscription
dimanche 31 août 2008
Dernière intervention
16 décembre 2010
- - Dernière réponse : uhrand
Messages postés
493
Date d'inscription
samedi 20 mai 2006
Dernière intervention
15 juillet 2012
- 24 déc. 2008 à 21:42
Bonjour à tous,
je suis en train d'étudier les collections, je n'arrive pas bien à comprendre la méthode hashcode(), si quelqu'un peut me donner quelques indications et informations sur cette méthode,merci.
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
493
Date d'inscription
samedi 20 mai 2006
Dernière intervention
15 juillet 2012
3
Merci
"equals" et "hashCode" vont ensemble: deux objets sont logiquement égaux, si leurs méthodes "hashCode" retournent chacune la même valeur (si ont n'implémente pas "equals" et "hashCode", chaque objet est égal uniquement à lui-même). Voici un exemple très simple:

public class MyElement {
    private String name;
    private int id;
    public MyElement(String name, int id) {
        this.name = name;
        this.id = id;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final MyElement other = (MyElement) obj;
        if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
            return false;
        }
        if (this.id != other.id) {
            return false;
        }
        return true;
    }
    @Override
    public int hashCode() {
        int hash = 3;
        hash = 97 * hash + (this.name != null ? this.name.hashCode() : 0);
        hash = 97 * hash + this.id;
        return hash;
    }
    @Override
    public String toString() {
        return "name: " + name + "  id: " + id;
    }
}

Le code suivant ne sortira qu'un seul élément:

Set set = new HashSet();
set.add(new MyElement("1", 1));   
set.add(new MyElement("1", 1));
System.out.println(set);

parce qu'un Set ne peut pas contenir des doublons.
Par contre, si on n'implémente pas "equals" et "hashCode", ce même code sortira deux éléments!

Merci uhrand 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de uhrand
Messages postés
35
Date d'inscription
dimanche 7 décembre 2008
Dernière intervention
16 juin 2010
0
Merci
bonsoir
y'a t'il monsieur un rapprot entre hashcode et eaquals dans hashtable
s'il y'a voici mon code et s'il vous plait montrer comment les inclures dans ceci
merci
import java.util.*;
class Hashtable1
{
    Hashtable m=new Hashtable();
   
    public boolean remplirHash(String s,Client c)
    {
        if(!m.containsKey(s))
        {
            m.put(s,c);
            return true;
        }
        else
            {   
                System.out.println("cle deja utilise");
                return false;
            }
       
    }
        public void affichage() {
                    Enumeration nb=m.keys();
                    Object key;
             while(nb.hasMoreElements()) {
                          key=nb.nextElement();
                        Client value=(Client) m.get(key);
                     System.out.println("cle = "+ key + "" + value );
                                         }
                            }

    Client getClient(String cle)
    {
        if(m.containsKey(cle))
        {
            Client value=(Client)m.get(cle);
            return value;
        }
        else
            return null;
    }
           
       
   

}
Commenter la réponse de cs_saif87
Messages postés
493
Date d'inscription
samedi 20 mai 2006
Dernière intervention
15 juillet 2012
0
Merci
Les objets utilisés comme clés doivent implémenter les méthodes hashCode et equals. Ici, les clés sont du type String et la classe String a déjà implémenté les méthodes hashCode et equals. Donc, tu n'as rien à progrmmer toi-même dans ce contexte!
Commenter la réponse de uhrand

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.