2012-06-04 8 views
5

autorización, aquí es la parte que no entiendo.
Si intenta recuperar un objeto utilizando el método get() y se devuelve nulo, aún es posible que null se almacene como el objeto asociado con la clave que suministró al método get(). Puede determinar si este es el caso pasando su clave del objeto al método containsKey() para el mapa. Esto devuelve true si la clave se almacena en el mapa
Entonces, ¿cómo se supone containsKey() decirme si el valor asociado con la llave suministrada es null?
Esto es the reference si quiere verificar. Página 553La comprensión HashMap <K,V>

Respuesta

4

consideran este sencillo fragmento de código:

Map<String, String> m = new HashMap<String, String>(); 
m.put("key1", "value1"); 
m.put("key2", null); 

System.out.println("m.get(\"key1\")=" + m.get("key1")); 
System.out.println("m.containsKey(\"key1\")=" + m.containsKey("key1")); 

System.out.println("m.get(\"key2\")=" + m.get("key2")); 
System.out.println("m.containsKey(\"key2\")=" + m.containsKey("key2")); 

System.out.println("m.get(\"key3\")=" + m.get("key3")); 
System.out.println("m.containsKey(\"key3\")=" + m.containsKey("key3")); 

Como se puede ver que puse en el mapa dos valores, uno de los cuales es nula. Thene le pregunté al mapa por tres valores: dos de ellos están presentes (uno es nulo) y el otro no. Mire el resultado:

m.get("key1")=value1 
m.containsKey("key1")=true 
m.get("key2")=null 
m.containsKey("key2")=true 
m.get("key3")=null 
m.containsKey("key3")=false 

La segunda y la tercera son la parte difícil. key2 está presente con valor nulo por lo que, usando get() no se puede discriminar si el elemento no está en el mapa, o está en el mapa con un valor null. Pero, usando containsKey() puede, ya que devuelve un boolean.

+0

Muy bien, eso lo explicó correctamente. En la programación de la vida real, tendré que usar 'containsKey()' primero para verificar si la clave es válida y luego mostrar el valor asociado a ella.Si no, muestre un mensaje o envíe una excepción :) –

+0

@FasihKhatib que solo es realmente necesario si está almacenando 'null's en el Mapa. Si nunca almacena 'null' en el Mapa, no tiene mucho sentido verificar las asignaciones nulas válidas. –

9
Map<String, Object> map = new HashMap<String, Object>(); 
map.put("Foo", null); 
System.out.println(map.containsKey("Foo")); 
System.out.println(map.containsKey("Boo")); 

SALIDA:

true 
false 

get() vuelve null en dos casos:

  • La clave no existe en el mapa.
  • La clave existe, pero el valor asociado es null.

No se puede decir en get() que es verdadero. Sin embargo, containsKey() le dirá si la clave estaba presente en el mapa, independientemente de si su valor asociado era null.

+2

1 - editado para la clarificación –

+0

que es más o menos lo que dije en el post anterior. – FSP

+0

sí, lo que dice el libro es que se supone que me ayude a comprobar si el valor V de la HashMap es nulo. –

1

containsKey diría que si la clave está en el HashMap en absoluto. Considere el caso donde una clave está presente con valor nulo y el otro caso en el que la clave que está buscando no está en absoluto en el hashmap.

+0

+1 respuesta correcta. –

3
(get() == null && containsKey()) == value is null 
Cuestiones relacionadas