¿Puede el valor clave en HashMap HashTable ConcurrentMap ser nulo?

¿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);

imagen-20230719112516082

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

imagen-20230719112657254

imagen-20230719112735531

obtener método

imagen-20230719112905985

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.

imagen-20230719113108419Tanto 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

imagen-20230719113857486

el valor es nulo

imagen-20230719113942278

Conclusión Ninguno de los valores clave de la tabla hash puede ser nulo

principio

imagen-20230719114134543

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

imagen-20230719120108173

el valor es nulo

imagen-20230719120153336

principio

imagen-20230719120249144

Supongo que te gusta

Origin blog.csdn.net/itScholar001/article/details/131805797
Recomendado
Clasificación