Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1100 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Besoin d'aide sur méthode contains de la class Collection

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Besoin d'aide sur méthode contains de la class Collection

n°1087832
tafkap
Posté le 18-05-2005 à 14:13:08  profilanswer
 

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
mood
Publicité
Posté le 18-05-2005 à 14:13:08  profilanswer
 

n°1087849
jon301
Posté le 18-05-2005 à 14:21:47  profilanswer
 

je crois que t'as oublié d'ajouter les items à ta Collection...

n°1087872
tafkap
Posté le 18-05-2005 à 14:35:13  profilanswer
 

Gloups j'avais oublié de recopier l'ajout dans la collection. C'est réparé. Mais le problème reste le même ;)

n°1087878
souk
Tourist
Posté le 18-05-2005 à 14:40:39  profilanswer
 

as tu redefini la methode equals heritee de Object ?

n°1087883
jon301
Posté le 18-05-2005 à 14:43:14  profilanswer
 

re
je ne vois pas trop pourquoi ça bug,
par contre cette ligne de code me parait bizzare
 

Code :
  1. if (legende.contains((RefTableItem)itemSearch))


 
Pourquoi forcer la conversion de itemSearch en RefTableItem alors qu'il est déjà du type RefTableItem ?
 
Essaye de faire  

Code :
  1. if (legende.contains(itemSearch))


 
on sait jamais  :p

n°1087930
tafkap
Posté le 18-05-2005 à 14:57:58  profilanswer
 

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 :) :)

n°1087943
jon301
Posté le 18-05-2005 à 15:03:23  profilanswer
 

désolé mais la ché pas  :(  
c bizzare quoi  :pt1cable:

n°1087964
nraynaud
lol
Posté le 18-05-2005 à 15:11:20  profilanswer
 

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 :
  1. public int hashCode() {
  2.   return code.hashCode() + description.hashCode();
  3. }


Message édité par nraynaud le 18-05-2005 à 15:11:44

---------------
trainoo.com, c'est fini
n°1088031
tafkap
Posté le 18-05-2005 à 15:48:07  profilanswer
 

nraynaud a écrit :

et je suis sûr que legende.contains(item2) renvoie true.
}[/cpp]


C'est à dire que mon code devrait fonctionner tel quel ? merci pour les infos de hashCode(), je regarde ça pour améliorer mon niveau ;)

n°1088037
nraynaud
lol
Posté le 18-05-2005 à 15:51:18  profilanswer
 

tafkap a écrit :

C'est à dire que mon code devrait fonctionner tel quel ?


non :o


---------------
trainoo.com, c'est fini
mood
Publicité
Posté le 18-05-2005 à 15:51:18  profilanswer
 

n°1088131
tafkap
Posté le 18-05-2005 à 16:39:29  profilanswer
 

Ok alors ça veut dire quoi cette phrase : "et je suis sûr que legende.contains(item2) renvoie true." ???

n°1088136
nraynaud
lol
Posté le 18-05-2005 à 16:43:29  profilanswer
 

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.


Message édité par nraynaud le 18-05-2005 à 16:43:44

---------------
trainoo.com, c'est fini
n°1088142
tafkap
Posté le 18-05-2005 à 16:46:18  profilanswer
 

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.

n°1088717
benou
Posté le 19-05-2005 à 07:12:25  profilanswer
 

nraynaud a écrit :


par contre, pour que ça marche, il faut redéfinir hashCode() en fonction de equals


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.


---------------
ma vie, mon oeuvre - HomePlayer
n°1088793
nraynaud
lol
Posté le 19-05-2005 à 09:56:52  profilanswer
 

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.


---------------
trainoo.com, c'est fini
n°1089196
benou
Posté le 19-05-2005 à 14:48:38  profilanswer
 

nraynaud a écrit :

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.


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.


---------------
ma vie, mon oeuvre - HomePlayer
n°1091658
tafkap
Posté le 21-05-2005 à 15:46:41  profilanswer
 

Salut,
 
dites, vous auriez pas un bon tuto sous la main ?  :jap:

n°1092007
benou
Posté le 21-05-2005 à 23:07:29  profilanswer
 
n°1092679
tafkap
Posté le 22-05-2005 à 18:30:54  profilanswer
 

Merci benou ;) ;)

n°1093185
tafkap
Posté le 23-05-2005 à 11:39:20  profilanswer
 

Bon c'est ok j'ai tout compris, j'ai bien redéfini mon equals et mon hashCode, ça fonctionne parfaitement.
 
Merci à tous.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Besoin d'aide sur méthode contains de la class Collection

 

Sujets relatifs
[XML/XSL] Template, besoin d'aide ...[Java | Batik] Demande d'aide pour aller plus loin
aide pour remplacement de mots dans une page webbesoin d'aide pour faire une page dynamique
Aide pour le CJeu Client/Serveur A l'aide
aide: truc tout con en labview pour tableauxRecupérer les paramatres d'une methode
Plus de sujets relatifs à : Besoin d'aide sur méthode contains de la class Collection


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR