2009-11-14 11 views
5

Ho una mappa ordinata e voglio fare riferimento ai suoi oggetti ordinati per la loro posizione di indice. È possibile? Come dovrei convertire una mappa ordinata in un elenco di array mantenendo l'ordine, così posso recuperare un oggetto dal suo indice (ordine). È questo l'unico modo per farlo?riferimento a oggetti java su una mappa ordinata per indice?

Idealmente avrei potuto questa struttura, e saprebbe l'indice di un oggetto all'interno di tale strucre e potrebbe rertieve esso dicendo:

Object nextObj = structure[4] //this structure is originally a sortedMap 
//SortedMap<String, Object> sortedMap = new TreeMap<String, Object>(); 

Il mio problema è che ho una mappa ordinata con cui lavorare in primo posto. C'è un modo noto per farlo?

Mille grazie per aver suggerito approcci a questo.

risposta

7

È possibile recuperare una matrice di valori-chiave dal SortedMap facendo

Object[] objects = structure.entrySet().toArray(); 
Object nextObj = structure[4]; 

Il codice seguente mostra come ottenere chiave e il valore dell'oggetto

java.util.Map.Entry<K, V> entry = (java.util.Map.Entry<K, V>) structure[4]; 
K key = entry.getKey(); 
V value = entry.getValue(); 

Edit: campione di ottenere valore dell'oggetto e la chiave

+1

entrySet() restituirà un set di oggetti Map.Entry. Se hai bisogno di un valore, usa valori(). E sì, l'iterazione su di essi manterrà l'ordinamento – Dmitry

+0

C'è comunque da sapere che l'insieme restituito da entrySet() manterrà l'ordine della struttura da cui proviene? In altre parole, la matrice verrà ordinata come la mappa ordinata originale? – denchr

+0

Questo è stato risposto prima che la mia pagina è stata aggiornata :) – denchr

5

vorrei utilizzare la seguente struttura

List<Pair<String,Object>> mylist; 

L'oggetto sarebbe stato sempre inserito/cercato con l'aiuto di un comparatore personalizzato e una serie di metodo come inferiore limite/upper_bound/equal_bound proprio come C++ (per esempio vedi here per un'implementazione Java)

+0

Usiamo questo tutto il tempo ed è incredibilmente veloce per trovare roba. Inoltre è possibile personalizzarlo per ottenere una sottolista tra due chiavi – Fortyrunner

Problemi correlati