2012-05-26 19 views
61

Estoy buscando una manera de cambiar el nombre de una clave Hashmap, pero no sé si es posible en Java.¿Es posible cambiar el nombre de una clave Hashmap?

+8

Dios mío, espero que no. Eliminar y volver a ingresar el par de clave/valor parece ser el camino a seguir. Tenga en cuenta que normalmente solo maneja las referencias en el mapa de todos modos. –

+3

¡No modifique la clave de una entrada hash! Si tienes suerte, lo cambiarás por algo con el mismo código hash y te volverás loco tratando de descubrir qué sucedió; si no tiene suerte, terminará con una entrada que no se puede encontrar (bueno, no hasta la próxima reconstrucción de toda la tabla). Quitar/reinsertar es mucho más saludable, y debería ser bastante barato (después de todo, son referencias). –

Respuesta

86

Intenta eliminar el elemento y ponlo de nuevo con el nuevo nombre. Suponiendo que las llaves en su mapa se String, se podría lograr de esa manera:

Object obj = map.remove("oldKey"); 
map.put("newKey", obj); 
+34

+1. Y lo más simple de leer es 'map.put (" newKey ", map.remove (" oldKey "));' y provisto contiene 'oldKey' –

+6

En lo que respecta a la legibilidad, no estoy de acuerdo. Personalmente, prefiero ver claramente que un objeto se elimina del mapa y luego se agrega. Y dado que el OP parece ser bastante nuevo en Java, decidí ponerlo de esa manera. Por el bien del rendimiento, sin embargo, su versión es, por supuesto, preferida (ya que no creo que el compilador optimice mi versión a su manera). –

+2

Para javac 1.8.0_45, la versión de una línea tiene dos códigos de byte más cortos, lo que me sorprendió. Más irritante con los genéricos no se puede pasar 'obj' a' put' sin emitirlo o declararlo como otro tipo, pero por supuesto, pasar el resultado de 'remove' funciona directamente. –

4

No cambia el nombre de una clave hashmap, tiene que insertar una nueva entrada con la nueva clave y eliminar la anterior.

11

asignar el valor de la clave, que necesita ser cambiado de nombre, a una clave nueva. Y elimina la llave antigua.

hashMap.put("New_Key", hashMap.get("Old_Key")); 
hashMap.remove("Old_Key"); 
4

no puede renombrar/modificar el HashMap clave vez añadido.

La única manera es eliminar/eliminar la clave e insertar la nueva clave y el par de valores.

Razón: En aplicación interna HashMap el modificador de la tecla Hashmap marcado como final.

static class Entry<K ,V> implements Map.Entry<K ,V> 
{ 
final K key; 
V value; 
Entry<K ,V> next; 
final int hash; 
...//More code goes here 
} 

Para Referencia: HashMap

6
hashMap.put("New_Key", hashMap.remove("Old_Key")); 

Esto va a hacer lo que quiere, pero se dará cuenta de que la ubicación de la clave ha cambiado.

+0

@Vins revise la documentación por favor: D, remove() devolverá el objeto, mira esto https://www.tutorialspoint.com/java/util/hashmap_remove.htm –

+0

mi mal, he eliminado mi comentario y lo he votado. Lo siento por eso. – Vins

Cuestiones relacionadas