J'ai récemment été confronté à une question similaire. La structure de données que j'ai utilisée est une combinaison d'une hashmap et d'un hashset.
1) setValue(String key, String value) Dans cette méthode, j' insère directement la paire dans la hashmap. Nous insérons également la clé dans le hashset
2) setAllValue (String Value) Dans cette méthode, je réinitialise la hashmap. Cela supprime toutes les paires puis ajoute une clé disons <"god"> et la valeur. Le hashset maintient l'ensemble de clés à travers toutes les versions de la hashmap.
3) getValue (String key) Dans cette méthode, je maintiens plusieurs conditions if/else pour retourner la valeur.
- Je vérifie la conditionnelle si la clé est présente dans la hashmap alors je retourne la valeur de cette clé. Cela peut se produire si soit il n'y a pas encore de clé "god" présente et que chaque clé conserve sa valeur d'origine, soit une clé "god" est là mais la valeur a été remplacée pour cette clé.
- Une condition else/if pour vérifier si la clé n'était pas présente dans le hashset alors retourner null car cette clé n'a jamais été présente dans la hashmap ou dans toute instance précédente de la map.
- Enfin une autre condition else dans laquelle je retourne la valeur de la clé <"god"> parce que ce else signifie que la clé existait dans une certaine version de la hashmap et n'a pas encore été remplacée.
class OptimisedMap {
Map mymap = new HashMap();
Set myset = new HashSet<>();
public void setValue (String key, String value) {
mymap.put(key, value);
myset.add(key);
}
public void setAllValue (String value) {
mymap = new HashMap<>();
mymap.put("god", value);
}
public String getValue (String key) {
if (mymap.containsKey(key)) {
return mymap.get(key);
} else if (!myset.contains(key)) {
return null;
} else {
return mymap.get(key);
}
}
public static void main (String args[]) {
OptimisedMap opmap = new OptimisedMap();
String value = opmap.getValue("hey");
if (value == null) {
System.out.println("Clé non présente");
}
opmap.setValue("hey", "there");
opmap.setValue("ho", "there");
System.out.println(opmap.getValue("hey")); // affichera there
opmap.setAllValue("whatsup");
System.out.println(opmap.getValue("hey")); // affichera whatsup
System.out.println(opmap.getValue("ho")); // affichera whatsup
opmap.setValue("hey", "there");
System.out.println(opmap.getValue("hey")); // affichera there
System.out.println(opmap.getValue("ho")); // affichera whatsup
}
}
0 votes
Est-il possible de mettre en œuvre par une table de hachage?