recorrer example entre ejemplos ejemplo diferencia java collections hashmap

java - example - Usar un HashMap como clave para otro HashMap



recorrer hashmap java foreach (1)

Tengo un requisito en el que necesito asignar un conjunto de configuraciones con un conjunto de valores, idealmente indicado por una estructura Map<Map<String, Object>, Map<String, Object>> .

Ambas configuraciones y la parte de valores del Mapa principal son arbitrarias y, por lo tanto, no puedo usar una clase concreta.

Por favor, brinde algunos comentarios sobre esta estructura. ¿Se puede usar un mapa como clave para otro mapa? Investigando un poco, pude establecer que el método de Iguales del Mapa utiliza todas las Claves y Valores subyacentes para considerar que dos Mapas son iguales. Además, el Código Hash de un Mapa se basa en los Hashcodes de las Teclas del Mapa. Esta IMO debería ser suficiente para cumplir con los requisitos mínimos de utilizar un mapa como clave.

Me gustaría que alguien valide esto antes de continuar con la implementación. En caso de que haya una solución / diseño mejor que alguien pueda sugerir, siéntase libre de hacerlo.

EDITAR

Terminé usando una simple tilde (''~'') & pipe (''|''), separé la cadena como la clave y la deconstruí cuando fuera necesario. Gracias a todos los que ayudaron.


Sí, un HashMap se puede usar como clave para otro mapa, ya que la clase reemplaza correctamente a .equals() y .hashCode() .

Sin embargo, en términos generales, es una mala idea usar tipos mutables (como HashMap ) como claves Map o Set elements, porque viola las invariantes que esperan estas clases si los objetos están mutados mientras están en la colección.

Si bien no es exactamente lo que está buscando, Guava ofrece varias estructuras de datos adicionales , como Multiset , MultiMap , BiMap , Table , que pueden ser útiles. También ofrecen colecciones inmutables como ImmutableMap que (debido a que no pueden ser mutadas) son más seguras de usar como una clave de Map . Lo que no quiere decir que deba hacerlo, simplemente que es seguro (si las claves y los valores también son inmutables).

Considere publicar una pregunta explorando el problema que lo lleve a concluir que una estructura de Map<Map<K, V>, Map<K, V>> era lo que necesitaba. Puede obtener mejores respuestas a esa pregunta.