Esiste una struttura dati per questo tipo di elenco / mappa?

22

Forse c'è un nome per quello che voglio, ma non ne sono consapevole. Ho bisogno di qualcosa di simile a un LinkedHashMap in Java, ma dove restituisce il valore 'precedente' se non c'è alcun valore nella chiave specificata.

Cioè, ho una lista di oggetti memorizzati da una chiave intera (che è in unità di tempo nel mio caso):

; key->value
10->A
15->B
20->C

Quindi, se dovessi richiedere un valore per la chiave 0-9, restituirebbe null . La parte speciale è che se interrogassi qualcosa 10 < = i < = 14 restituirebbe A. Oppure, per i > = 20, restituirebbe C.

Esiste una struttura dati per questo?

    
posta Nick 03.10.2013 - 21:08
fonte

2 risposte

33

Stai cercando un NavigableMap . Questo è un sottotipo di SortedMap che ha anche alcune funzioni disponibili oltre alla natura della mappa che viene ordinata. Si noti che la mappa navigabile "è destinata a sostituire l'interfaccia SortedMap." ( Miglioramenti del framework Raccolte Java SE 6 ). Tutto ciò che attualmente implementa SortedMap implementa NavigableMap e probabilmente rimarrà vero.

In particolare, il metodo floorKey(K key) che "restituisce la chiave più grande minore o uguale alla chiave data, o null se non esiste una chiave di questo tipo.

Questo è solo uno dei tanti metodi che ti permettono di ottenere chiavi o submap specifici della mappa.

  • ceiling / floor (la voce che è superiore / inferiore al parametro)
  • accesso delle chiavi o mappa in ordine decrescente
  • head / tail (le voci in ordine minore / maggiore di una determinata chiave)
  • superiore / inferiore (il prossimo tasto più alto o più basso del parametro)
  • submap (date due chiavi, restituisce la mappa che si trova tra le due chiavi)

Java ha due implementazioni di NavigableMap - la TreeMap e ConcurrentSkipListMap .

Se guardi l'idea / l'implementazione di una skip list vedrai perché funzionerebbe davvero bene con una struttura e le sue query.

    
risposta data 03.10.2013 - 21:13
fonte
1

Quello che stai cercando è una tabella dei simboli che supporta le operazioni ordinate. E nel tuo caso è l'operazione del piano.

L'implementazione hash di una tabella di simboli è la più veloce, ma non offre quelle operazioni ordinate.

Ma l'implementazione dell'albero delle tabelle dei simboli lo fa. Un esempio di ciò in Java è la classe TreeMap

    
risposta data 03.10.2013 - 23:51
fonte

Leggi altre domande sui tag