web-dev-qa-db-fra.com

HashMap permet les doublons?

J'ai un doute concernant HashMap, comme nous le savons tous, HashMap autorise une paire clé/valeur nulle. Ma question est la suivante. 

Si j'ai écrit comme ça,

m.put(null,null);
m.put(null,a);

Lance-t-il une (erreur ou exception) ou va-t-il remplacer la valeur ou quelle sera la valeur de returing ??

11
Nani

Type Hashmap Remplace cette clé si la clé hashmap est identique.

map.put("1","1111");
map.put("1","2222");

sortie

key:value
1:2222
23
user3094411

Chaque clé dans un HashMap doit être unique.

Lors de "l'ajout d'une clé dupliquée", l'ancienne valeur (pour la même clé, car les clés doivent être uniques) est simplement remplacée; voir HashMap.put :

Associe la valeur spécifiée à la clé spécifiée dans cette carte. Si la carte contenait précédemment un mappage pour la clé, l'ancienne valeur est remplacée.

Retourne la valeur précédente associée à la clé, ou null s'il n'y avait pas de mappage pour la clé.

En ce qui concerne les valeurs NULL: une seule valeur null key est autorisée (car les clés doivent être uniques), mais HashMap peut avoir un nombre quelconque de valeurs null values ​​ et une clé NULL n'a pas besoin de valeur NULL. Par la documentation :

[.. HashMap] autorise null values ​​ et [a] null key.

Cependant, la documentation indique que Nothing indique que null/null doit être une paire clé/valeur spécifique ou que null/"a" est invalide.

10
user2864740

Exemple de code:

HashMap<Integer,String> h = new HashMap<Integer,String> ();

h.put(null,null);
h.put(null, "a");

System.out.println(h);

Sortie:

{null=a}

Il remplace la valeur à la clé null .

9
kai

Ne permet pas les doublons dans le sens, Cela permet de vous ajouter mais cela ne sert à rien que cette clé ait déjà une valeur ou non. Donc, actuellement, pour une clé il n’y aura que une valeur  

Il remplace en silence la clé value pour null. Pas exception.

Lorsque vous essayez d'obtenir, la dernière valeur insérée avec null sera renvoyée.

Ce n'est pas seulement avec null et pour n'importe quelle clé.

Avoir un exemple rapide 

   Map m = new HashMap<String, String>();
   m.put("1", "a");
   m.put("1", "b");  //no exception
   System.out.println(m.get("1")); //b
7
Suresh Atta

HashMap n'autorise pas les clés en double, mais comme il n'est pas thread-safe, des clés peuvent être dupliquées

 while (true) {
            final HashMap<Object, Object> map = new HashMap<Object, Object>(2);
            map.put("runTimeType", 1);
            map.put("title", 2);
            map.put("params", 3);
            final AtomicInteger invokeCounter = new AtomicInteger();

            for (int i = 0; i < 100; i++) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        map.put("formType", invokeCounter.incrementAndGet());
                    }
                }).start();
            }
            while (invokeCounter.intValue() != 100) {
                Thread.sleep(10);
            }
            if (map.size() > 4) {
// this means you insert two or more formType key to the map
               System.out.println( JSONObject.fromObject(map));
            }
        }
3
dingjsh
m.put(null,null); // here key =null
m.put(null,a);/here also key=null

Les clés en double ne sont pas autorisées dans hashmap.
Cependant, la valeur peut être dupliquée.

0
BINIT kumar jha