IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Boucle imbriquée avec 2 maps


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Par défaut Boucle imbriquée avec 2 maps
    Bonjour,

    je bloque sur un algo qui me génère une boucle infinie sans que je sache vraiment pourquoi.

    Je dispose de 2 maps :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		Map<String, String> map1 = new HashMap<String, String>();
    		map1.put("key_0" , "value_0");
    		map1.put("key_1" , "value_1");		
    		map1.put("key_2" , "value_2");		
    		Map<String, String> map2 = new HashMap<String, String>();
    		map2.put("key_0" , "value_00");
    		map2.put("key_1" , "value_01");
    		map2.put("key_2" , "value_02");
    L'algo est le suivant (qui m'a pourtant l'air simple) :
    - je parcours map1 et pour chaque élement de map1, je regarde sa clé et je vérifie si cette clé est présente dans map2. Je parcours donc map2 pour chaque élément de map1 et j'effectue un test sur la clé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    		for (Iterator<String> imap1 = map1.keySet().iterator() ; imap1.hasNext() ; ){
    			String keyMap1 = (String) imap1.next();					
    			System.out.println("key = " + keyMap1 + " value = " + map1.get(keyMap1)); 
     
    			for (Iterator<String> imap2 = map2.keySet().iterator() ; imap2.hasNext() ; ){
    				if (map2.containsKey(keyMap1)) {
    					System.out.println("map2 contient bien la clé suivante de map1  : " + keyMap1);
    				} else {
    					System.out.println("map2 ne contient pas la clé suivante de map1 : " + keyMap1);
    				}	
    			}
    		}
    Ce code boucle donc sans fin. Si quelqu'un pouvait m'expliquer pourquoi et ce qu'il faudrait faire pour régler le pb, je lui en serai bien reconnaissant !!

    Merci

  2. #2
    Membre émérite Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    Bonjour,
    Dans ta boucle sur map2, tu ne fais jamais avancer l'iterateur imap2. Donc impa2.next() renvoie toujours true.
    Tu pourrais le faire avancer, mais je pense que cette boucle est mal placée, personellement, je suivrait l'algo suivant:
    - Pour chaque élément de map1, regarder s'il est dans map2
    - Pour chaque élément de map2, regarder s'il est dans map1.

    C'est à dire deux boucle séparées.
    Je te conseille également de regarder la méthode retainAll de l'interface Set, c'est à dire l'interface de map.keySet(), qui permet de comparer deux Set de données.

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 747
    Par défaut
    Ok merci infiniment Jidefix.
    Effectivement, ton algo est bien + efficace et moins couteux en ressource que ce que je voulais faire.
    En tout cas, cela marche nickel maintenant.

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 10/11/2010, 09h24
  2. [Smarty] boucles imbriquées avec requêtes SQL, impossible à comprendre
    Par dexxter dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 18/05/2007, 23h52
  3. Boucle imbriquée avec for each et while
    Par guen dans le forum Access
    Réponses: 7
    Dernier message: 01/03/2007, 17h36
  4. [Débutant]Boucle imbriquée avec des bornes différentes
    Par Hayato dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 29/08/2005, 16h23
  5. [XSL]boucle imbriquée avec condition
    Par kor dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 11/01/2005, 14h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo