Besoin d'aide sur méthode contains de la class Collection - Java - Programmation
Marsh Posté le 18-05-2005 à 14:21:47
je crois que t'as oublié d'ajouter les items à ta Collection...
Marsh Posté le 18-05-2005 à 14:35:13
Gloups j'avais oublié de recopier l'ajout dans la collection. C'est réparé. Mais le problème reste le même
Marsh Posté le 18-05-2005 à 14:43:14
re
je ne vois pas trop pourquoi ça bug,
par contre cette ligne de code me parait bizzare
Code :
|
Pourquoi forcer la conversion de itemSearch en RefTableItem alors qu'il est déjà du type RefTableItem ?
Essaye de faire
Code :
|
on sait jamais
Marsh Posté le 18-05-2005 à 14:57:58
Non je n'ai pas redéfinie la méthode equals et pour la ligne bizarre c'était un test, au cas où le résultat est le même
Allez allez, encore des idées
Marsh Posté le 18-05-2005 à 15:11:20
et je suis sûr que legende.contains(item2) renvoie true.
tu n'as pas défini la méthode equals() dans la classe RefTableItem et donc il utilise la technique par défaut qui est l'identité.
je te laisse aller consulter la documentation ou le tutorial poru écrire cet méthode.
par contre, pour que ça marche, il faut redéfinir hashCode() en fonction de equals(), et comme tu n'as probablment pas le niveau, je te la donne :
Code :
|
Marsh Posté le 18-05-2005 à 15:48:07
nraynaud a écrit : et je suis sûr que legende.contains(item2) renvoie true. |
C'est à dire que mon code devrait fonctionner tel quel ? merci pour les infos de hashCode(), je regarde ça pour améliorer mon niveau
Marsh Posté le 18-05-2005 à 15:51:18
tafkap a écrit : C'est à dire que mon code devrait fonctionner tel quel ? |
non
Marsh Posté le 18-05-2005 à 16:39:29
Ok alors ça veut dire quoi cette phrase : "et je suis sûr que legende.contains(item2) renvoie true." ???
Marsh Posté le 18-05-2005 à 16:43:29
c'est parce que le equals() par défaut compare l'identité et non l'égalité structurelle.
Je t'ai dit d'aller dans un tutorial sur equals(), l'as-tu fait ? Je soupçonne que non.
Marsh Posté le 18-05-2005 à 16:46:18
Non je ne l'ai pas fait, pas encore, mais je vais suivre ton précieux conseil, je me posais la question précédente car en fait ça me retourne false.
Marsh Posté le 19-05-2005 à 07:12:25
nraynaud a écrit : |
je suis d'accord avec toi que c'est plus prudent, mais là, avec une ArrayList, y a pas besoin... C'est seulement nécessaire quand un algo de hashage est utilisé. Avec un HashSet par exemple ce serait nécessaire.
Marsh Posté le 19-05-2005 à 09:56:52
benou a écrit : je suis d'accord avec toi que c'est plus prudent, mais là, avec une ArrayList, y a pas besoin... C'est seulement nécessaire quand un algo de hashage est utilisé. Avec un HashSet par exemple ce serait nécessaire. |
parce que tu crois qu'ailleur dans son système il ne va pas hacher son truc ?
vlà le bug indémerdable si son binôme est pas au courant qu'il a pas remis le hashCode dans l'axe du equals.
d'ailleur tous les outils de vérification font des warning là-dessus.
Marsh Posté le 19-05-2005 à 14:48:38
nraynaud a écrit : parce que tu crois qu'ailleur dans son système il ne va pas hacher son truc ? |
je suis d'accord. je précisais juste que LA (!!!!!!) le hashcode ne serait pas utilisé, contrairement à ce que ton post laissait croire ...
Je suis d'accord qu'il faut redéfinir l'une quand on définit l'autre.
Marsh Posté le 21-05-2005 à 23:07:29
ReplyMarsh Posté le 23-05-2005 à 11:39:20
Bon c'est ok j'ai tout compris, j'ai bien redéfini mon equals et mon hashCode, ça fonctionne parfaitement.
Merci à tous.
Marsh Posté le 18-05-2005 à 14:13:08
Bonjour,
j'ai un petit soucis avec la méthode contains de la class Collection.
Voici l'exemple :
Collection legende = new ArrayList();
RefTableItem item1 = new RefTableItem("CODE1","Mon code 1" );
RefTableItem item2 = new RefTableItem("CODE2","Mon code 2" );
RefTableItem item3 = new RefTableItem("CODE3","Mon code 3" );
legende.add(item1);legende.add(item2);legende.add(item3);legende.add(item4);
legende.add(item5);legende.add(item6);legende.add(item7);
RefTableItem itemSearch = new RefTableItem("CODE2","Mon code 2" );
if (legende.contains((RefTableItem)itemSearch))
{
System.out.println("Trouvé" );
}
else
{
System.out.println("Non trouvé" );
}
Et systématiquement mon élément itemSearch n'est pas trouvé dans la Collection legende. Pourquoi ?
D'avance merci pour votre aide.
Message édité par tafkap le 18-05-2005 à 14:35:27