179 votes

HashMap pour retourner la valeur par défaut pour les clés non trouvées?

Est-il possible qu'un HashMap renvoie une valeur par défaut pour toutes les clés non trouvées dans le jeu?

J'utilise Java.

180voto

Spycho Points 2571

En Java 8, utilisez Map.getOrDefault . Il faut la clé et la valeur à renvoyer si aucune clé correspondante n'est trouvée.

155voto

maerics Points 47743

Aucune implémentation de Map ne le fait exactement, mais il serait trivial d'implémenter la vôtre en étendant HashMap:

 public class DefaultHashMap<K,V> extends HashMap<K,V> {
  protected V defaultValue;
  public DefaultHashMap(V defaultValue) {
    this.defaultValue = defaultValue;
  }
  @Override
  public V get(Object k) {
    return containsKey(k) ? super.get(k) : defaultValue;
  }
}
 

80voto

Dave Newton Points 93112

Utilisez la carte par défaut de Commons si vous ne souhaitez pas réinventer la roue, par exemple,

 Map<String, String> map = new DefaultedMap<>("[NO ENTRY FOUND]");
String surname = map.get("Surname"); 
// surname == "[NO ENTRY FOUND]"
 

Vous pouvez également transmettre une carte existante si vous n'êtes pas chargé de la créer.

10voto

IvanMushketyk Points 1068

Vous pouvez simplement créer une nouvelle classe qui hérite de la table de hachage et ajouter getDefault méthode. Voici un exemple de code:

public class DefaultHashMap<K,V> extends HashMap<K,V> {
    public V getDefault(K key, V defaultValue) {
        if (containsKey(key)) {
            return get(key);
        }

        return defaultValue;
    }
}

Je pense que vous ne devriez pas ignorer get(K key) la méthode de la mise en œuvre, en raison des motifs prévus par Ed Staub dans son commentaire, et parce que vous allez rompre le contrat de la Carte d'interface (ce qui peut potentiellement conduire à une certaine dur-à-trouver des bugs).

4voto

mrkhrts Points 731

Il le fait par défaut. Il retourne null .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X