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

cs_limalima 125 Messages postés dimanche 31 août 2008Date d'inscription 16 décembre 2010 Dernière intervention - 14 déc. 2008 à 16:15 - Dernière réponse : uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention
- 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

uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 14 déc. 2008 à 19:25
+3
Utile
"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!
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de uhrand
cs_saif87 35 Messages postés dimanche 7 décembre 2008Date d'inscription 16 juin 2010 Dernière intervention - 24 déc. 2008 à 19:30
0
Utile
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
uhrand 493 Messages postés samedi 20 mai 2006Date d'inscription 15 juillet 2012 Dernière intervention - 24 déc. 2008 à 21:42
0
Utile
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.