¿Puede el valor clave en HashMap HashTable ConcurrentMap ser nulo?
Hablemos primero de la conclusión.
Tanto la clave como el valor de hashmap pueden ser nulos; cuando se repite la clave, el valor de la segunda clave sobrescribirá el valor de la primera clave.
La clave y el valor de HashTable no pueden ser nulos
ConcurrentMap almacena datos y su clave y valor no pueden ser nulos.
1.Mapa Hash
//key为null value为null
HashMap<String,String> hashMap=new HashMap<>();
hashMap.put(null,null);
hashMap.put("zhangsan",null);
System.out.println(hashMap);
//多个key为null
HashMap<String,String> hashMap2=new HashMap<>();
hashMap2.put(null,"111");
hashMap2.put(null,null);
System.out.println(hashMap2);
Conclusión: Tanto la clave como el valor de un hashmap pueden ser nulos; cuando se repite la clave, el valor de la segunda clave sobrescribirá el valor de la primera clave.
principio
poner método
obtener método
Lo que se devuelve es nulo, en este momento no se sabe si no se encuentra el valor nulo o el valor correspondiente.
Esto plantea un problema: cuando el hilo A usa containsKey() para hacer un juicio, descubre que existe este elemento. Cuando llama a get() para obtener este elemento, el hilo B se une y el hilo B elimina el elemento. En este momento En este momento, el valor obtenido por el hilo A es nulo, el hilo A pensará que ha obtenido este valor, pero en realidad el valor nulo en este momento es un nulo que no se ha encontrado. De esta forma, pueden surgir problemas de seguridad entre hilos.
Tanto es así que usamos currentHashMap para almacenar datos en una situación de subprocesos múltiples, y su clave y valor no pueden ser nulos.
2.Tabla hash
//key为null
Hashtable<String, String> table = new Hashtable<String, String>();
table.put(null,"111");
System.out.println(table);
//value为null
Hashtable<String, String> table2 = new Hashtable<String, String>();
table2.put("zhangsan",null);
System.out.println(table2);
la clave es nula
el valor es nulo
Conclusión Ninguno de los valores clave de la tabla hash puede ser nulo
principio
3.Mapa concurrente
ConcurrentMap<String, String> concurrentMap = new ConcurrentHashMap<>();
//key为null
concurrentMap.put(null,"111");
System.out.println(concurrentMap);
ConcurrentMap<String, String> concurrentMap2 = new ConcurrentHashMap<>();
//key为null
concurrentMap2.put("zhangsan",null);
System.out.println(concurrentMap2);
la clave es nula
el valor es nulo
principio