Bonjour,
mon titre n'est pas tres clair mais je ne savais pas quoi mettre.
Je souhaite avoir un objet style HashTable permettant de mettre à jour la valeur lorqu'on ajoute une clé deja existante.
genre :
La clé que j'utilise pour le hash est un objet de ma création. Je me suis donc dis que j'aller redefinir equals pour cet objet clé.hashTable : (k1, 10);
-> put(k1,100)
hasTable : (k1;110);
l'objet clé (LigneCharge) est tableau de string de longueur 5
ma méthode equals (dans la classe clé) est donc :
je veux qu'à chaque fois que je tente d'ajouter une valeur, si la clé existe déjà, je mets à jour la vakeur. J'ai donc fait ceci (dans la classe qui à le hashTable) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 public boolean equals(Object o2){ if(this == o2) return true; if((o2 == null) || (o2.getClass() != this.getClass())) return false; return this.equals((LigneCharge) o2) ; } private boolean equals(LigneCharge l2){ if(((String)this.tableau[0]).equals((String)l2.tableau[0])){//PROGRAMME if(((Integer)this.tableau[1]).equals((String)l2.tableau[1])){//PROJET if(((String)this.tableau[2]).equals((String)l2.tableau[2])){//TASK if(((String)this.tableau[3]).equals((String)l2.tableau[3])){//RESOURCE return (((String)this.tableau[4]).equals((String)l2.tableau[4]));//PERIOD } } } } return false; }//equals
mais bon ça n'a pas l'air de fonctionner. J'ai des doublons quand je parcours ce HashTable. Donc je suppose qu'il ne tient pas compte de mon equals.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 /** * Vérifie si la clé existe. si oui addition avec la valeur initiale * si non création nouvelle entrée */ public void add(LigneCharge key,Double value){ if(liste.containsKey(key)){ System.out.println("contains"); //remove et insert Double units = (Double) liste.get(key); liste.remove(key); liste.put(key, new Double(value.doubleValue()+units.doubleValue())); } else liste.put(key, value); }//add
Comment dois-je m'y prendre ??
Partager