Quelle collection java autorise les clés en double


J'essaie d'écrire un programme pour supprimer les paires clé-valeur en double d'une liste de mots. Cependant, si la clé est dupliquée avec une valeur différente, cet enregistrement doit être autorisé à ajouter. Veuillez m'aider à comprendre quelle collection java serait résoudre cette situation.

  • key1 aaaa
  • cle2 bbbb
  • cle3 cccc
  • key4 dddd
  • key2 bbbb-paire en double-non autorisée
  • key1 hhhh - clé dupliquée-autorisée
  • key5 gggg
  • cle2 nnnn
Author: amal, 2016-02-26

6 answers

Vous pouvez le faire avec un multimap, en utilisant un ensemble comme collection pour les valeurs, c'est assez simple à faire.

Voici quelques-unes des bases d'une implémentation, pas le tout, mais vous ne pouviez pas imaginer que vous auriez besoin de plus que cela ou peut-être d'une méthode remove

Modifier

Juste vu que vous vouliez que les paires en double soient jetées, vous pouvez le faire en utilisant un ensemble, au lieu de lancer une erreur, juste rendu le bool pour montrer s'il était déjà là ou non (s'il existe renvoie false)

public class MultiValueMap<K,V> 
{
    private final Map<K,Set<V>> mappings = new HashMap<K,Set<V>>();

    public Set<V> getValues(K key)
    {
        return mappings.get(key);
    }

    public Boolean putValue(K key, V value)
    {
        Set<V> target = mappings.get(key);

        if(target == null) 
        {
            target = new HashSet<V>();
            mappings.put(key,target);
        }

        return target.add(value);
    }

}
 3
Author: konkked, 2016-02-26 01:59:16

Vous ne pouvez pas le faire par collection Java.

Vous pouvez utiliser Multimap il prend en charge les clés en double, mais il prend également en charge les clés en double et les paires de valeurs.

La meilleure solution pour vous est d'utiliser Multimap et de vérifier si la valeur existe déjà, alors ne l'ajoutez pas.

 1
Author: sanky jain, 2016-02-26 01:32:58

À ma connaissance, il n'y a pas d'implémentation de cette collection dans le JRE par défaut. Cependant, il semble y avoir des implémentations en bibliothèques tierces.

Pour obtenir quelque chose de similaire, vous pouvez utiliser un Map<K, List<V>>, qui est une carte contenant une liste de valeurs pour chaque clé.

Cependant, je ne pense pas que vous en ayez besoin. Pour fusionner des valeurs pour les clés en double, vous pouvez vérifier si la clé existe déjà avant de mettre une nouvelle paire clé-valeur dans la carte.

  • si c'est déjà existe, remplacez la valeur par l'ancienne et la nouvelle valeur fusionnée
  • , si elle n'existe pas encore, il suffit de mettre la nouvelle paire clé-valeur dans la carte.
 1
Author: Stefan Dollase, 2017-05-23 11:52:47

Depuis Guava 2.0, il y a un nouveau type de carte, le SetMultimap, que vous pouvez utiliser et qui, je pense, correspond exactement à vos objectifs. Il permet les clés en double, mais pas les paires clé/valeur en double. Voir la documentation Goyave .

 1
Author: Brian, 2017-07-20 17:20:55

Un dictionnaire contient des mots et des définitions, donc sheep="wooly mammal" est une affectation valide. Chaque fois que vous regardez les moutons, vous obtenez laineux mammifères.

Un tableau est indexé par un entier, et peut avoir des valeurs en double,

    arr[2]=5 ; arr[7]=5;

Un hachage peut également stocker des valeurs en double, mais les clés doivent être uniques:

    Adam{age}=21;
    Bill{age}=21;

Certaines langues utilisent des points pour les propriétés:

Adam.age=21;
 -1
Author: Arif Burhan, 2016-02-26 01:34:52

Votre cas a essentiellement besoin d'un HashMap.

Il suffit de mettre key comme clé et value comme valeur dans un HashMap.

C'est parce que la clé sera unique et en cas de collision dans les valeurs HashMap maintient une liste chaînée pour stocker toutes ces collisions values.In si une valeur est la même que toute valeur antérieure dans la liste chaînée, elle remplace simplement l'ancienne par la nouvelle.

Par ex.

Selon votre condition:

Key1 aaaa should doit être stocké Key1 bbbb -- doit être stocké Key1 aaaa -- ne doit pas être stocké car il est en double.

Donc, fondamentalement, hashmap stockera les valeurs "aaaa" et "bbbb"contre "key1" comme clé. Plus tard, lorsque nous essayons de stocker à nouveau "aaaa" contre "key1", l'ancienne valeur stockée "aaaa" sera simplement remplacée.

Par conséquent, la duplication des valeurs est automatiquement gérée par hashmap.

Par conséquent , vous pouvez utiliser HashMap dans votre cas.

 -2
Author: ramasCoder, 2016-02-26 02:25:06