Comportement des Set... pas compris...

Comportement des Set... pas compris... - Java - Programmation

Marsh Posté le 08-05-2005 à 16:08:35    

Bonjour,
 
je fais appel aux grands Javateux qui trainent sur ce forum.
 
Je viens de me trouver confronté à un comportement étrange des Set.
 
la méthode contains ne fonctionnait pas. Elle renvoyait faux pour un objet effectivement présent dans le set, je l'ai vérifié avec un iterator et en applicant la methode equals sur chacun des éléments du set.
par la même la méthode remove foirait de plus belle. J'imagine qu'elle s'appuie sur contains, donc je n'était pas choqué.
 
J'ai utilisé une ArrayList, et hop! plus de soucis.
 
Alors, pourqoui donc ? java.util.Set ne respecte pas la définition de java.util.Collection ?
 
qu'est-ce que j'ai raté ?


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Marsh Posté le 08-05-2005 à 16:08:35   

Reply

Marsh Posté le 08-05-2005 à 17:05:19    

a tout hasard, tu as redefini equals pour ta classe, mais tu as oublie de redefinir hashcode ? [:itm]

Reply

Marsh Posté le 08-05-2005 à 17:05:44    

Tu as fumé ?
 

Code :
  1. Set s = new HashSet();
  2.         s.add(new Integer(4));
  3.         s.add("hello" );
  4.         System.out.println(s.contains("foo" ));
  5.         System.out.println(s.contains("hello" ));
  6.         System.out.println(s.contains(new Integer(4)));
  7.         System.out.println(s.contains(new Integer(5)));


 

Code :
  1. false
  2. true
  3. true
  4. false


 
Fais voir ton code...


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 08-05-2005 à 17:19:31    

Code :
  1. boolean retVal;
  2.  synchronized (map) {
  3.   List list = (List) map.get(new Integer(msg.getNoTransac()));
  4.   if (list == null || list.isEmpty()) {
  5.    map.notify();
  6.    throw new RuntimeException("Aucun acquitement n'est attendu. " );
  7.   }
  8.   HostDesc host = new HostDesc(msg.getAddrSource().getHostAddress(),
  9.     +msg.getPortSource());
  10.   if (!list.contains(host)) {
  11.    map.notify();
  12.    throw new RuntimeException(
  13.      "Acquitement non attendu de cet hôte " + host);
  14.   }
  15.   list.remove(host);
  16.   retVal = list.isEmpty();
  17.   map.notify();
  18.   return retVal;
  19.  }


tu remplaces List par Set, et ça marchait pô...
 
mais j'ai pas redéfini hashcode(), c'est vrai... j'ay ai pas pensé...


---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed