Avresti per attuare tale mappa te, credo. Hai ragione che dovrebbe essere ordinato; l'implementazione di get
dovrebbe iterare attraverso le chiavi fino a quando non trova la chiave più grande che è minore o uguale all'argomento.
Se si sottoclasse TreeMap
inizialmente sembrerebbe che si possa ottenere questo funzionamento semplicemente ignorando il metodo get()
. Tuttavia, per mantenere il più possibile il contratto Map, è necessario sovrascrivere altri metodi per coerenza.
E per esempio, ad es. containsKey()
? Il tuo principale contiene una mappatura per 40
? Se si restituisce false
, un client può decidere di non chiamare get()
in base a queste informazioni; per questo motivo (e la definizione formale) devi restituire true
. Ma poi rende difficile determinare se la mappa "contiene veramente" una determinata mappatura; se stai cercando di fare qualcosa come l'aggiornamento senza sovrascrivere nulla che già esiste.
Il metodo remove()
potrebbe anche essere complicato. Dalla mia lettura dell'interfaccia,
// 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);
deliberando costantemente qui sarebbe molto difficile. Se si dispone di una mappatura da 35-40 ad esempio, e si chiama remove(38)
, quindi, a quanto ho capito, si dovrebbe restituire null
per ogni successiva ottiene per la chiave 38, ma restituire la suddetta mappatura per le chiavi 35-37 o 39 -40.
Così, mentre si può fare un inizio su questo sovrascrivendo TreeMap, forse l'intero concetto di Map
non è proprio ciò che si vuole qui. A meno che non si abbia bisogno di questo comportamento per inserire metodi esistenti che richiedono lo Map
, potrebbe essere più semplice crearlo da solo come classe distinta poiché non è piuttosto una mappa, il modo in cui lo si sta definendo.
fonte
2010-08-19 08:39:19
Significa "<= 41', credo. Ma cercherete sempre "39,41,43,45" o dovrebbe funzionare se provate con "40,42,50"? E c'è sempre solo una via di mezzo? –
Possibile duplicato di [Strutture dati che possono mappare un intervallo di chiavi a un valore] (https://stackoverflow.com/questions/13399821/data-structures-that-can-map-a-range-of-keys-to -un valore) – Vadzim