[Debutant(e)] [hashmap] interface interne Map.Entry
Bonjour,
j'ai un probleme avec la methode removeEldestEntry des LinkedHashMap.
voici une partie du code:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
public class ma_classe{
private Map maplhm;
private static final int MAX = 5;
public ma_classe(){
maplhm= new LinkedHashMap();
}
protected boolean removeEldestEntry(Map.Entry eldest) {
return maplhm.size() > MAX;
}
public void ajouter (Val v){
if(removeEldestEntry(maplhm.entrySet())== true) //pas bon
maplhm.remove(maplhm.size()); //pas bon
maplhm.put(cle,v); //cle non indiquée ici mais fonctionne
}
} |
le pb c'est : removeEldestEntry(maplhm.entrySet())
le parametre n'est pas bon apparemment.
le compilo dit:
removeEldestEntry(java.util.Map.Entry) in ma_classe cannot be applied to (java.util.Set)
le but de la methode ajouter est de tester d'abord si la map contient le nb max d'entrées. Si c'est le cas, elle doit supprimer le premier element ajouté (le + ancien). et je ne sais pas comment indiquer quel est l'élément le + ancien.
dc 2 pbs:
1) le parametre de removeEldestEntry
2) trouver l'élément le premier ajouté ds la map dc le + ancien
dc si vous pouviez m'aider.
merci
[Modéré par Didier] : ajout de tag dans le titre - Les règles du forum Java
Re: [Debutant(e)] hash map : interface interne Map.Entry
Citation:
Envoyé par debdev
1) le parametre de removeEldestEntry
Effectivement il y a un problème là, et pas qu'un même :P Alors on la refait en moins crispé...
- maplhm est de type java.util.Map
- la méthode entrySet() de Map retourne un java.util.Set
- et removeEldestEntry() prend un paramètre un Map.Entry
Donc déjà rien que sur le plan théorique il y a un problème, et c'est ce que le compilo te dit.
Bon avant de pouvoir résoudre ce petit problème il faut clarifier ce qu'est sensé faire la méthode removeEldestEntry :
- le nom de la méthode contient "remove" mais elle ne remove rien du tout.
- elle prend un paramètre qui n'est jamais utilisé dans le corps de la méthode
Au passage je viens de remarquer qu'il y avait une méthode removeEldestEntry dans LinkedHashMap et que la doc de cette méthode était plutôt... obscure.
Citation:
2) trouver l'élément le premier ajouté ds la map dc le + ancien
Pour savoir quel est l'élement le plus ancien, il faut que ta map ait une notion des dates d'ajout ou plus simplement que tu utilises le fait que les entrées de ta Map sont stockées en liste chaînée, ce qui veut dire que l'élément le plus ancien est le premier élément de la liste.
J'essaie de faire un bout de code qui fait ce que tu as dit et je te le poste quand j'ai fini...