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

Signaler
Messages postés
124
Date d'inscription
dimanche 31 août 2008
Statut
Membre
Dernière intervention
16 décembre 2010
-
Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
-
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.
A voir également:

3 réponses

Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
10
"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!
Messages postés
35
Date d'inscription
dimanche 7 décembre 2008
Statut
Membre
Dernière intervention
16 juin 2010

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;
    }
           
       
   

}
Messages postés
491
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
15 juillet 2012
10
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!