Habría que poner en práctica dicho mapa a sí mismo, creo. Tienes razón en que debería ser ordenado; la implementación de get
tendría que iterar a través de las claves hasta que encuentre la clave más grande que sea menor o igual que el argumento.
Si la subclase TreeMap
inicialmente parece que puede hacer que esto funcione simplemente anulando el método get()
. Sin embargo, para mantener la mayor cantidad posible del contrato de Map, tendrá que anular otros métodos para mantener la coherencia.
¿Y qué tal, p. containsKey()
? ¿Su main contiene un mapeo para 40
? Si devuelve false
, un cliente puede decidir no llamar al get()
basándose en esta información; por estos motivos (y la definición formal) debe devolver true
. Pero luego hace que sea difícil determinar si el mapa "realmente contiene" un mapeo dado; si está buscando hacer algo como actualizar sin sobrescribir nada que ya exista.
El método remove()
también puede ser complicado. De mi lectura de la interfaz,
// Calling map.remove "Removes the mapping for a key from this map if it is present."
map.remove(x);
// Now that the mapping is removed, I believe the following must hold
assert map.get(x) == null;
assert map.containsKey(x);
Actuando consistentemente aquí sería muy complicado. Si tiene un mapeo de 35-40 por ejemplo, y llama al remove(38)
, entonces, según tengo entendido, tendrá que devolver null
para cualquier obtención posterior de la clave 38, pero devuelva el mapeo antes mencionado para las claves 35-37 o 39. -40.
Así, mientras que usted puede hacer un comienzo en esta reemplazando TreeMap, tal vez todo el concepto de Map
no es exactamente lo que usted quiere aquí. A menos que necesite este comportamiento para insertar en los métodos existentes que toman Map
, podría ser más fácil crearlo usted mismo como una clase distinta ya que no es un Mapa, la forma en que lo está definiendo.
Quieres decir '<= 41 'Supongo. ¿Pero siempre buscará '39,41,43,45' o debería funcionar si lo intenta con ex' 40,42,50'? ¿Y siempre hay solo uno en el medio? –
Posible duplicado de [Estructuras de datos que pueden asignar un rango de claves a un valor] (https://stackoverflow.com/questions/13399821/data-structures-that-can-map-a-range-of-keys-to -a-value) – Vadzim