recorrer ordenado example entre elementos diferencia definicion adicionar java null hashmap key

ordenado - ¿De qué sirve agregar una clave o valor nulo a un HashMap en Java?



map string string java (7)

HashMap permite una clave nula y cualquier cantidad de valores nulos. ¿Cuál es el uso de ello?


Aquí está mi único ejemplo algo inventado de un caso donde la clave null puede ser útil:

public class Timer { private static final Logger LOG = Logger.getLogger(Timer.class); private static final Map<String, Long> START_TIMES = new HashMap<String, Long>(); public static synchronized void start() { long now = System.currentTimeMillis(); if (START_TIMES.containsKey(null)) { LOG.warn("Anonymous timer was started twice without being stopped; previous timer has run for " + (now - START_TIMES.get(null).longValue()) +"ms"); } START_TIMES.put(null, now); } public static synchronized long stop() { if (! START_TIMES.containsKey(null)) { return 0; } return printTimer("Anonymous", START_TIMES.remove(null), System.currentTimeMillis()); } public static synchronized void start(String name) { long now = System.currentTimeMillis(); if (START_TIMES.containsKey(name)) { LOG.warn(name + " timer was started twice without being stopped; previous timer has run for " + (now - START_TIMES.get(name).longValue()) +"ms"); } START_TIMES.put(name, now); } public static synchronized long stop(String name) { if (! START_TIMES.containsKey(name)) { return 0; } return printTimer(name, START_TIMES.remove(name), System.currentTimeMillis()); } private static long printTimer(String name, long start, long end) { LOG.info(name + " timer ran for " + (end - start) + "ms"); return end - start; } }


Las respuestas hasta ahora solo consideran el valor de tener una clave null , pero la pregunta también pregunta sobre any number of null values .

El beneficio de almacenar el valor null contra una clave en un HashMap es el mismo que en las bases de datos, etc. - puede registrar una distinción entre tener un valor que está vacío (por ejemplo, cadena "") y no tener ningún valor (nulo )


No estoy seguro de lo que me está preguntando, pero si está buscando un ejemplo de cuándo uno quisiera usar una clave nula, los uso a menudo en los mapas para representar el caso predeterminado (es decir, el valor que debería usarse). si una clave dada no está presente):

Map<A, B> foo; A search; B val = foo.containsKey(search) ? foo.get(search) : foo.get(null);

HashMap maneja especialmente las claves nulas (ya que no puede llamar a .hashCode() en un objeto nulo), pero los valores nulos no son nada especiales, se almacenan en el mapa como cualquier otra cosa


Otro ejemplo: lo uso para agrupar datos por fecha. Pero algunos datos no tienen fecha. Puedo agruparlo con el encabezado "NoDate"


Un ejemplo de uso de valores null es cuando se utiliza un HashMap como caché para los resultados de una operación costosa (como una llamada a un servicio web externo) que puede devolver un null .

Poner un valor null en el mapa le permite distinguir entre el caso donde la operación no se ha realizado para una clave determinada cache.containsKey(someKey) devuelve false ), y donde se ha realizado la operación, pero devolvió un valor null ( cache.containsKey(someKey) devuelve true , cache.get(someKey) devuelve null ).

Sin valores null , tendría que poner algún valor especial en la caché para indicar una respuesta null , o simplemente no almacenar en caché esa respuesta y realizar la operación todo el tiempo.


Un ejemplo sería para modelar árboles. Si está utilizando un HashMap para representar una estructura en árbol, donde la clave es la primaria y el valor es la lista de elementos secundarios, los valores para la clave null serán los nodos raíz.


Una clave nula también puede ser útil cuando el mapa almacena datos para selecciones de UI donde la clave del mapa representa un campo de frijol.

Un valor de campo nulo correspondiente se representaría, por ejemplo, como "(seleccione)" en la selección de IU.