JAVA parcourir une hashmap [Résolu/Fermé]

Signaler
Messages postés
243
Date d'inscription
lundi 4 août 2008
Statut
Membre
Dernière intervention
20 mai 2018
-
 tytoo -
Bonjour,

Je souhaite parcourir une hashmap pour voir le contenu des valeurs de ma hashmap en faisant une sorte de boucle for mais je ne sais pas du tout comment faire sur une hashmap.

Merci de m'éclaircir si jamais quelqu'un s'y connait en hashmap.

a+

11 réponses

Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
678
Lu,

8 heures? omg. Permier essai: https://www.google.fr/search?client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&channel=s&hl=fr&source=hp&q=hashmap+sample&meta=&btnG=Recherche+Google&gws_rd=ssl

Un clic sur la 1ère réponse nous donne ceci: https://web.stanford.edu/group/coursework/docsTech/jgl/api/com.objectspace.jgl.examples.HashMapExamples.html

Si on veut te facturer plus de temps que 2 minutes, ce de l'arnaque, ne paye pas =)

Sinon, pour répondre à ta question, tu n'es pas obligée d'utiliser un iterator. Le simple fait de faire une boucle sur les valeurs de l'ensemble des clefs suffit. Et en Java 5+ c'est assez élégant / lisible. Genre

Map<String, String> hashMap = new HashMap<String, String>();
for (String mapKey : hashMap.keySet()) {
	// utilise ici hashMap.get(mapKey) pour accéder aux valeurs
}


++
46
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60588 internautes nous ont dit merci ce mois-ci

parfait, précis.
Je cherchais a boucler direct sur la map..

Merci!

A++
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
678
Humpf, toujours pas clair xD Je fais la fine bouche, j'sais... xD

Relis-toi. Avant
en fait je veux comparer le string de ma 1ere hashmap avec le 2eme string de la 2eme hasmap.


à présent
je veux verifier si dans ma hashmap1, le nombre de poire et de pommes est bien superieur au nombre
présent dans la hashmap2


Tu seras d'accord que les 2 cahiers de charge ont peu de choses en commun. Retenons le 2ème, donc. Tu veux vérifier que c'est TOUJOURS le cas (i.e. pour CHAQUE fruit) d'avoir un nombre supérieur dans la map imbriquée par rapport au nombre présent dans la hashmap1?

Si c'est le cas (et si, aussi, ta hashmap2 contient uniquement UNE paire key-value, chose que tu n'as pas confirmé), tu pourrais faire ceci:

1. tu fais une extraction de la hashmap imbriquée. Disons qu'elle s'appelle hmap3 (pour brouiller les pistes xD)
2. tu parcours hashmap1 en suivant ses keys. Pour chaque key (qui est un fruit), tu feras donc:
- déterminer sa valeur associée (=le nombre de fruits)
- chercher sa valeur dans hmap3
- comparer les deux valeurs et interrompre la boucle si la condition que tu veux vérifier n'est pas respectée

OKi comme ça?
Messages postés
243
Date d'inscription
lundi 4 août 2008
Statut
Membre
Dernière intervention
20 mai 2018
5
merci !!!

j'ai quasi fini ma fonction sauf qu'à la fin j'ai un char que je voudrais absolument convertir en int mais je crois que c'est impossible non?
Messages postés
243
Date d'inscription
lundi 4 août 2008
Statut
Membre
Dernière intervention
20 mai 2018
5
personne n'aurait une toute petite idée ???
Messages postés
243
Date d'inscription
lundi 4 août 2008
Statut
Membre
Dernière intervention
20 mai 2018
5
merci pour ton aide,

pour info j'ai cherché la réponse à ma question pendant 8 heures et comme tout ce que j'ai testé bug, je me suis dit que je pourrai peut être trouver de l'aide sur le forum...

Pour revenir à mon bug, d'après toi je ne suis pas obligée d'utiliser un iterator ? seules les méthodes de Hashmap suffisent?
Messages postés
243
Date d'inscription
lundi 4 août 2008
Statut
Membre
Dernière intervention
20 mai 2018
5
merci :)

j'ai fait ceci mais j'ai une erreur au niveau du string value:
mais je vais essayé ce que tu m'as proposé mais je pense avoir une ancienne version de java donc je sais pas si ca va marché

while (mahashmap != null ) {
for( Iterator ii = mahashmap.keySet().iterator(); ii.hasNext();) {
String key = (String)ii.next();
String value = (String) mahashmap.get(key);

System.out.println("valeur de la cle : "+ key);
System.out.println("valeur de la valeur : "+ value);
}
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
678
Tu as têtre ton erreur car tu n'as pas des String (ou pas uniquement que des String) dans ta Map. Vérifie ce point.

Dans un autre ordre d'idées, pourquoi ton while (mahashmap != null ) ?

Il te faut le JDK 1.5 ou plus récent pour compiler mon bout de code.
Messages postés
243
Date d'inscription
lundi 4 août 2008
Statut
Membre
Dernière intervention
20 mai 2018
5
c'est bon j'ai trouvé !!! merci sandul

j'ai fait : Object val = mahashmap.get(key);

pour le while, je me suis trompée => j'ai essayé avec if et ça marche!!
une dernière petite question stp : pour comparer le contenu de deux hashmaps, je peux refaire le même prog en changeant juste le nom de la hashmap puis comparer les variables de clés et de valeurs ?
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
678
pour comparer le contenu de deux hashmaps, je peux refaire le même prog en changeant juste le nom de la hashmap puis comparer les variables de clés et de valeurs ? <== j'avoue ne pas trop suivre la démarche que tu proposes xD

A la va-vite, je ferais ceci:
- tester l'égalite des size
- tester si hmap1 est incluse dans hmap2
- tester si hmap2 est incluse dans hmap1

L'inclusion de hmap1 dans hmap2 se ferait via le balayage de hmap1 (avec ta boucle) et un test pour voir si la key ainsi que la valeur sont dans hmap2.

++
Messages postés
243
Date d'inscription
lundi 4 août 2008
Statut
Membre
Dernière intervention
20 mai 2018
5
en fait dans ma premiere hashmap1 contient <string, int>, ma seconde hashmap contient <String, <String, int>>
en fait je veux comparer le string de ma 1ere hashmap avec le 2eme string de la 2eme hasmap.
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
678
Poste la déclaration exacte de la hashmap2 en syntaxe Java5 ou bien fais une description...
<String, <String, int>>
ne veut rien dire. Les keys sont des String, OK. Mais les valeurs sont des quoi? Les paires <String, int> n'existent pas en tant qu'Object Java...
Messages postés
243
Date d'inscription
lundi 4 août 2008
Statut
Membre
Dernière intervention
20 mai 2018
5
en fait ma hashmap contient une autre hashmap
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
678
Ta hashmap contient une seule paire <key, value> ? Ou bien plusieurs ? Dans ce dernier cas, il conviendrait de dire "ma hashmap contient des hashmap comme valeurs". Est-ce bien le cas ? Si oui, décris encore ton test à faire... Tu as UNE hashmap (hashmap1) et une MULTITUDE de hashmaps (les valeurs possibles de hashmap2). Que veux-tu comme comparaison?

Il serait pas mal de faire un tit exemple très simple. Genre

hmap1
<("a", 1), ("b", 2)>

hmap2
??

++
Messages postés
243
Date d'inscription
lundi 4 août 2008
Statut
Membre
Dernière intervention
20 mai 2018
5
voici un exemple :

hashmap1 = {poire=3, sucre=2}

hashmap2 = {tarte = {poire=1, sucre=1}}

je veux verifier si dans ma hashmap1, le nombre de poire et de pommes est bien superieur au nombre
présent dans la hashmap2
Messages postés
3924
Date d'inscription
jeudi 22 mai 2008
Statut
Membre
Dernière intervention
8 octobre 2010
678
Re,

Si, c'est possible, pourquoi pas... Tu as un char ou un string ?
char c = '8';
int convertedValue = Character.digit(c, 10);


ou bien
String s = "8";
int convertedValue = Integer.valueOf(s).intValue();


++
Bonjour,
Une question comme ça trouve sa réponse dans la javadoc de sun qui est gratuite, ne l'oublions pas

Comme toute collection présentant l'interface Map, il y a une méthode keySet() qui retourne un Set avec les clés, et une méthode values() qui retourne une Collection.
Dans les deux cas, tu peut obtenir un iterator, ou utiliser le mécanisme de for de la version 1.5 pour parcourir ces listes.

L'informatique, ce n'est pas faire que ce qu'on connaît, c'est aussi et surtout explorer ce dont on a besoin, et c'est d'ailleurs ça qui est intéressant.
Cherchez, les gars avant de poser une question, cherchez !