Bonjour, Je souhaite savoir comment mettre à jour la valeur lorqu'on ajoute une clé deja existante dans un HashMap. J'ai lu des topics parlant de redefinition de la methode equals() mais je ne comprend pas ??
Merci
Bonjour, Je souhaite savoir comment mettre à jour la valeur lorqu'on ajoute une clé deja existante dans un HashMap. J'ai lu des topics parlant de redefinition de la methode equals() mais je ne comprend pas ??
Merci
Heu... Vous voulez mettre à jour une valeur ou en ajouter une?
je souhaite mettre a jour une valeur si la key est présente dans mon Hashmap
Il te suffit de faire un "put(cle, valeur)" comme lorsque tu ajoutes un nouvel élément à ta Map. Si la clé existe déjà dans ta Map, la nouvelle valeur écrase l'ancienne pour cette même clé, ce qui correspond à la mise à jour que tu voulais faire.
La prochaine fois que tu fera un get(cle) sur ta Map, tu récupérera la derniere valeur enregistree pour cette clé (donc l'objet mis à jour).
En espérant avoir été clair...
Les objets java fournis par Sun servant généralement de clé (String, Integer...) ont déjà une méthode "equals()" et "hashcode()" assurant que tou se passe bien. La redéfinition (ou plutôt surcharge) de ces méthodes n'est nécessaire que lorsque tu utilises des objets que tu as développés toi même en guise de clé.
Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
Mes articles et tutoriaux & Mon blog informatique
au juste je me suis mal expriméje voulais dire faire une addition de l'ancienne valeur avec la nouvelle
Tu procèdes en 3 temps:Envoyé par Diablo_22
- récupération de l'ancienne valeur
- addition avec ta nouvelle valeur dans une variable temporaire
- écrasement de l'ancienne valeur par le résultat du calcul précédent
En supposant que ta clé est un String et ta valeur un Integer:
Edit: évidemment, ce code est simpliste et non sécurisé (juste pour montrer la méthode): Il faut l'encapsuler avec les tests qui vont bien, car si la clé n'existait pas dans ta Map, tu te retrouves avec une bonne vieille NullPointerException...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Map maMap; public void addtionne(String cle, int val) { Integer ancienneValeur = (Integer) maMap.get(cle); Integer nouvelleValeur = new Integer(ancienneValeur.intValue() + val); maMap.put(cle, nouvelleValeur); }
Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
Mes articles et tutoriaux & Mon blog informatique
A ce compte là, il te faut redéfinir la méthode put dans une classe personnalisée qui fait le traitement que tu souhaitesEnvoyé par Diablo_22
![]()
[EDIT]grillé par CyberChouan
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 put(clé, valeur) nouvelleValeur = valeur; si (clé existe) alors {traitement personnalisé qui détermine la nouvelle valeur} super.put(clé,nouvelleValeur)[/EDIT]
[EDIT 2]Une solution peut être plus élégante consisterait à faire un décorateur de map ...[/EDIT 2]
Un décorateur de Map?... Tiens, je connais plus ou moins le Pattern Décorateur, mais ça, je ne connaissais pas. Tu pourrais expliquer rapidement le principe? Ca m'intéresse (pour ma culture personnelleEnvoyé par Fifan31
)
Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
Mes articles et tutoriaux & Mon blog informatique
Bien vu. Je te remercie pour ton coup de pouce et vos idées les gars
![]()
En fait, tu en as presque fait un sans le savoirEnvoyé par CyberChouan
![]()
Le principe est le suivant: Le décorateur implémente la même interface que le "décoré" et le décorateur "connait" le "décoré" (en le passant en argument du constructeur par exemple).
Ce qui peut donner schematiquement ceci:Tu peux trouver une explication plus détaillée ici
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public class MonDecorateur implements Map{ private Map decore; public MonDecorateur(Map decore){ this.decore = decore; } // Cette méthode et toutes les autres de l'interface ;) public void put(cle, valeur){ // traitement specifique du decorateur (peut être vide) // après le traitement, appel de la méthode sur l'objet décoré decore.put(nouvelleCle, nouvelleValeur) } }
Partager