cs_limalima
Messages postés124Date d'inscriptiondimanche 31 août 2008StatutMembreDernière intervention16 décembre 2010
-
14 déc. 2008 à 16:15
uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 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.
uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 juillet 20129 14 déc. 2008 à 19:25
"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!
cs_saif87
Messages postés35Date d'inscriptiondimanche 7 décembre 2008StatutMembreDernière intervention16 juin 2010 24 déc. 2008 à 19:30
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;
}
uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 juillet 20129 24 déc. 2008 à 21:42
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!