Quizás haya un nombre para lo que quiero, pero no lo sé. Necesito algo similar a a LinkedHashMap
en Java, pero donde devuelve el valor 'anterior' si no hay ningún valor en la clave especificada.
Es decir, tengo una lista de objetos almacenados por una clave entera (que en mi caso es en unidades de tiempo):
; key->value
10->A
15->B
20->C
Entonces, si tuviera que consultar un valor para la clave 0-9, volvería null
. La parte especial es que si consultara por algo 10 <= i <= 14 devolvería A. O, para i> = 20, devolvería C.
¿Hay una estructura de datos para esto?
java
data-structures
Mella
fuente
fuente
Respuestas:
Estás buscando un NavigableMap . Este es un subtipo de SortedMap que también tiene algunas funciones disponibles además de la naturaleza del mapa que se está ordenando. Tenga en cuenta que el mapa navegable "está destinado a reemplazar la interfaz SortedMap". ( Mejoras del marco de colecciones de Java SE 6 ). Todo lo que actualmente implementa se
SortedMap
implementa,NavigableMap
y es probable que esto siga siendo cierto.En particular, el método
floorKey(K key)
que "devuelve la clave más grande menor o igual que la clave dada, o nulo si no existe dicha clave.Este es solo uno de los muchos métodos que le permiten obtener claves específicas o submapas del mapa.
Java tiene dos implementaciones de NavigableMap : TreeMap y ConcurrentSkipListMap .
Si observa la idea / implementación de una lista de omisión , verá por qué funcionaría realmente bien con dicha estructura y sus consultas.
fuente
LinkedHashMap
que él menciona. NiTreeMap
tampocoConcurrentSkipListMap
se ordenan por tiempo de inserción comoLinkedHashMap
, sino que se ordenan por unaComparator
o el orden natural de la clave si se implementanComparable
.Lo que está buscando es una tabla de símbolos que admita operaciones ordenadas. Y en su caso es la operación de piso.
La implementación hash de una tabla de símbolos es la más rápida, pero no ofrece esas operaciones ordenadas.
Pero la implementación en árbol de las tablas de símbolos sí. Un ejemplo de eso en Java es la clase TreeMap
fuente