Diviser hashmap en deux

Fermé
lily_bg - 4 avril 2013 à 10:38
 Utilisateur anonyme - 5 avril 2013 à 23:11
Bonjour,

je souhaite réussir a faire ce démarche. Pourriez vous m'aider ?

Hashmap: A 12 B 21 C 26 D 34 E 41 F 41 G 56

je voudrais comparer la valeur 34 par les valeurs du hashmap
==> si hashmap.get(key)==34
*** diviser le hashmap en deux ***

Hashmap1: A 12 B 21 C 26
Hashmap2: E 41 F 41 G56

Merci
A voir également:

4 réponses

En parcourant la hashmap, et en ayant crée une seconde hashmap tu peux ensuite utiliser la méthode remove pour supprimer les valeurs à retirer de la première hashmap :

Map map = new HashMap(); 
//On suppose ici l'initialisation de la hashmap map 

Map map2=new HashMap(); 

Set cles = map.keySet();//retourne un tableau d'objet de type Set contenant les clés de la hashmap 

//it pointe sur le début de la hashmap
Iterator it = cles.iterator(); 
while (it.hasNext()){ //vrai tant que next existe
   Object cle = it.next(); // Récupération de la prochaine clétu p
   Object valeur = map.get(cle); // recupération de la clé

//Tu peux ensuite tester ici la cle et insérer dans la nouvelle hashmap map2, supprimer dans la premiere etc  

}


Résolu? ===> [RESOLU]
0
Apparemment j'ai un peu de retard il y a beaucoup plus efficace maintenant avec le for étendu:

//Attention aux type du couple clé valeur
for(Map.Entry<TypeCle, TypeValeur> couple : map.entrySet()) {
TypeCle cle = couple.getKey();//Recup clé
TypeValeur valeur = couple.getValue();//Recup valeur
// Traitements ...
}
0
Merci

Mais mon probleme etait comment mettre
les valeurs qui precedent la valeur 34 dans une HAshmap
les valeurs qui suivent 34 dans une autre Hashmap :)
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
4 avril 2013 à 19:26
Premièrement ton affichage des map est un peu ambiguë, je pense que tu veux dire que tu as ceci :

map: {A=12, B=21, C=26, D=34, E=41, F=41, G=56}
map.get(key) = 34
==>
map1: {A=12, B=21, C=26} 
map2: {E=41, F=41, G=56}


Cependant il y a au moins deux problèmes, que se passerai-t-il si tu avais plusieurs fois la même valeur ? Par exemple :

map: {A=1, B=2, C=1, D=2, F=1}
map.get(key) = 2

Quel serait le résultat attendu ?

map1: {A=1} 
map2: {C=1, D=2, F=1}

ou peut-être :

map1: {A=1} 
map2: {C=1}
map3: {F=1}

Dans ton problème ce n'est pas clair.

Autre problème. Plus grave. Tu utilises des HashMap comme si elles étaient triées, sur les clés, or ce n'est pas du tout le cas. Et "l'ordre" réel de tes éléments va énormément modifier le contenu de tes maps de résultats

Exemple :

public static void main(String[] args)
{ 
    HashMap<Character,Integer> map = new HashMap<Character,Integer>();

    map.put('A', 12);
    map.put('B', 21);
    map.put('C', 26);
    map.put('D', 34);
    map.put('E', 41);
    map.put('F', 41);
    map.put('G', 56);
    
    System.out.println(map);
}

Comme tu peux le voir, l'ordre réel de la map avec ton exemple sera :
map: {D=34, E=41, F=41, G=56, A=12, B=21, C=26}

Donc si tu "coupes" avec 34 tu obtiendras

map1: {}
map2: {E=41, F=41, G=56, A=12, B=21, C=26}

Il faut donc faire très attention à ce que tu veux faire, avant même de se poser la question de comment on le code en Java !

Donnes nous quelques éclaircissements sur les deux points que j'ai relevé (l'ordre des clé, et la multiplicité des valeurs qui peuvent être obtenues), afin que l'on puisse t'aider au mieux pour ce que tu veux faire.
0
Utilisateur anonyme
5 avril 2013 à 10:04
J'ai pas dû tout comprendre...
Si tu veux mettre les valeurs inférieures à 34 dans une hashmap et les supérieures dans une autre je ne vois pas où est ton problème...
Si tu essai juste de la couper en deux "au milieu" tu vas avoir des surprises
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
5 avril 2013 à 18:50
Effectivement, si c'était "mettre les valeurs inférieures à 34 dans une hashmap et les supérieures dans une autre" ça serait simple, mais ce n'est pas comme ça que je comprends "les valeurs qui precedent la valeur 34", d'où ma longue explication des "surprises" que l'on pourrait avoir...
0
Utilisateur anonyme
5 avril 2013 à 23:11
autant pour moi ;)
0