Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Probleme surcharge methode equals

5 réponses
Avatar
ploutarboeuf
Bonjour,

La j'ai comme qui dirais un truc que je ne comprend pas. J'utilise un objet
de ma definition en clef d'une hashtable. Pour retrouver la clefs lors d'un
appel a containsKey sur la hashtable on surcharge donc la methode equals (en
faisant attention de bien respecter la signature). Bon jusque la j'espere ne
pas avoir raconter de connerie...(en fait je ne fais que recopier les
messages sur le meme sujet que j'ai deja lue :s). Il est tard pour
moi...mais franchement je ne vios pas ce qui cloche dans mon code. Voici une
version simplifie de ce que je ne comprend pas (voir code ci dessous).
Pourquoi l'execution de ce code fait apparaitre en console toujours
"no"...et jamais "ok" et encore moin "equals" ou "hashCode" ? Je suis
certain que c'est une grosse connerie mais la je ne vois pas :s

Objet utilise en clef :
-----------------------------------------------------------
public class Key {
private String value;
private int hashCode;

public Key(String inValue, int inCode) {
value = inValue;
hashCode = inCode;
}
public boolean equals(Object obj) {
boolean result = true;
System.out.println("equals");
return result;
}
public int hasCode() {
System.out.println("hashCode");
return hashCode;
}
}
-----------------------------------------
Fichier mail :
-------------------------------------------
import java.util.*;

public class TrivialApplication {

public static void main(String args[]) {
Hashtable table = new Hashtable();

table.put(new Key("1", 1), "value1");
table.put(new Key("2", 2), "value2");

if(table.containsKey(new Key("1", 1))) {
System.out.println("ok");
}else {
System.out.println("no");
}
}
}

5 réponses

Avatar
yvon.thoravalNO-SPAM
ploutarboeuf wrote:

Bon jusque la j'espere ne
pas avoir raconter de connerie...


Il y a un exemple à cette adresse :

<http://www.geocities.com/technofundo/tech/java/equalhash.html>

tu ne compares pas à this...
--
yt

Avatar
nioTo
Pourquoi l'execution de ce code fait apparaitre en console toujours
"no"...et jamais "ok" et encore moin "equals" ou "hashCode" ? Je suis
certain que c'est une grosse connerie mais la je ne vois pas :s

Objet utilise en clef :
-----------------------------------------------------------
public class Key {
private String value;
private int hashCode;

public Key(String inValue, int inCode) {
value = inValue;
hashCode = inCode;
}
public boolean equals(Object obj) {
boolean result = true;
System.out.println("equals");
return result;
}
public int hasCode() {
System.out.println("hashCode");
return hashCode;
}
}


Il manque un 'h' dans le nom de cette dernière méthode

nioTo

Avatar
Craps
il faut deja mettre this devant les variables private de ta classe

public Key(String inValue, int inCode)
{
this.value = inValue;
this.hashCode = inCode;
}
Avatar
Yogo
public int hasCode() {
System.out.println("hashCode");
return hashCode;
}


essaye avec: public int hashCode()

Avatar
Marc Petit-Huguenin
Yogo wrote:
public int hasCode() {
System.out.println("hashCode");
return hashCode;
}



essaye avec: public int hashCode()




D'ou l'interet d'utiliser les nouvelles features de java 1.5:

@Override public int hasCode() {
...
}