Tengo una tabla hash. El método values () devuelve valores en un orden diferente del orden en el que estoy insertada. ¿Cómo puedo obtener los valores en el mismo orden en que inserté? Usar LinkedHashmap es una alternativa pero no está sincronizado.Cómo mantener el orden de los elementos en la tabla hash
Respuesta
Utilice un LinkedHashMap
.
tabla hash y vinculado implementación de la lista de la interfaz
Map
, con orden de iteración predecible. Esta implementación de difiere deHashMap
en y mantiene una lista de doble enlace que se ejecuta en todas sus entradas. Esta lista vinculada define el orden de iteración , que normalmente es el pedido en el que se insertaron claves en el mapa (orden de inserción). Tenga en cuenta que el orden de inserción no se ve afectado si una clave es que se volvió a insertar en el mapa. (A clave k se reinserta en un mapa m sim.put(k, v)
se invoca cuandom.containsKey(k)
volveríatrue
inmediatamente antes de la invocación.)
combinarse con Collections.synchronizedMap()
.
Así, por ejemplo:
Map<String, String> map = Collections.synchronizedMap(
new LinkedHashMap<String, String>());
Para aclarar: si no estoy buscando tener más de una banda de rodadura, acceda a este 'LinkedHashMap' a la vez, ¿aún así se lo recomendaría sincronizar? ¿O el 'LinkedHashMap' por sí mismo se consideraría suficiente? – blo0p3r
@ blo0p3r El 'LinedHashMap' debería ser suficiente por sí mismo. –
Una tabla hash es intrínsecamente desordenada, por lo que está utilizando una estructura de datos incorrecta. Como no especifica qué idioma está utilizando, no puedo sugerir un alternativo, pero necesita algún tipo de conjunto de clave/valor ordenado.
estoy usando Java. JDK1.6 –
Estoy bastante seguro de que la razón no están ordenados tablas hash es que ayuda al almacenamiento y velocidad de recuperación. Debido a esto, sugeriría usar una estructura externa para mantener el orden y simplemente usar la tabla hash para almacenar valores (para una búsqueda rápida).
Usted podría envolver un LinkedHashMap
y sincronizar o puede utilizar la utilidad Collections.synchronizedMap
para crear un sincronizado LinkedHashMap
:
Map m = Collections.synchronizedMap(new LinkedHashMap(...));
Desde el JavaDoc:
Si varios subprocesos tienen acceso a un mapa hash relacionado al mismo tiempo, y al menos uno de los hilos modifica estructuralmente el mapa, debe estar sincronizado externamente. Esto se logra normalmente sincronizando en algún objeto que naturalmente encapsula el mapa. Si no existe tal objeto, el mapa debe ser "ajustado" utilizando el método Collections.synchronizedMap. Esto se realiza mejor en el momento de la creación, para evitar el acceso accidental no sincronizado al mapa
muchas gracias ... pero ¿será un éxito de rendimiento? –
La sobrecarga de rendimiento será insignificante (literalmente nanosegundos). – Adamski
Si jdk1.6 tiene solo dos tipos de mapas ordenados EnumMap y LinkedHashMap. Ambos no están sincronizados.Si sólo tiene que recordar el orden, utilice
Map m = Collections.synchronizedMap(new LinkedHashMap(...));
si quieres ordenada luego usar ConcurrentSkipListMap
- 1. Cómo mantener el orden de los registros en una tabla de base de datos
- 2. cómo mantener un valor hash en la columna de la tabla en los carriles
- 3. Ruby mantener el orden de inserción del hash
- 4. Mantener juntos los elementos envueltos
- 5. ¿Cómo eliminar los duplicados de la lista de Python y mantener el orden?
- 6. comparar arrays para la igualdad, el orden de los elementos
- 7. Cómo cambiar el orden de los elementos en un dijit.form.Select
- 8. Mantener el orden en MySQL "IN" consulta
- 9. Cambiar el orden de los elementos
- 10. Mantener el ancho de la tabla fijo
- 11. ¿Cómo puedo mantener el orden de las claves que agrego a un hash Perl?
- 12. Establecer el orden de los elementos de los cambios?
- 13. stack.ToList() en .NET - orden de los elementos?
- 14. El orden de los elementos en el diccionario
- 15. Ordene los hash en el orden alfabético por un campo
- 16. Como llegar los elementos en el orden correcto de iterador()
- 17. Cómo mantener el orden de los atributos anidados cuando se utiliza accepts_nested_attributes_for en una aplicación Rails
- 18. Mantener un árbol binario equilibrado cuando los elementos se insertan en orden
- 19. ¿Cómo obtener los primeros n elementos de Hash en ruby?
- 20. Cambiar el orden de los elementos al serializar XML
- 21. ¿Cómo mantener el orden de las columnas al crear una nueva tabla usando hibernación?
- 22. tabla hash en JavaScript
- 23. Complejidad del tiempo de la tabla hash
- 24. Orden de unión de tabla en postgres
- 25. Algoritmo de hash para la implementación de la tabla hash
- 26. Orden de los elementos devueltos mediante getElementsByTagName()
- 27. cómo obtener la clave de valor en la tabla hash
- 28. Orden de elementos de la prueba de pepino en la tabla
- 29. MongoDB: Cómo pedir una "seleccione en" en el mismo orden que los elementos de la matriz
- 30. Tabla hash bidireccional en Erlang
qué idioma está usando? –
LinkedHashMap es una parte de Java. – jimyi
estoy usando Java. JDK1.6 –