Création d'un objet à l'aide d'un HashTable - Redefinition equals
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 :
Citation:
hashTable : (k1, 10);
-> put(k1,100)
hasTable : (k1;110);
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é.
l'objet clé (LigneCharge) est tableau de string de longueur 5
ma méthode equals (dans la classe clé) est donc :
Code:
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 |
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:
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 |
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.
Comment dois-je m'y prendre ??