2015-05-07 13 views
5
for (Entry<Double, String> entry : map.entrySet()) { 
     Double key = entry.getKey(); 
     String value = entry.getValue(); 

     // double nextKey = ? 
     // String nextvalue = ? 

     // double prevKey = ? 
     // String prevValue = ? 
    } 

è possibile sapere quale elemento precedente e l'elemento successivo durante l'iterazione della mappa?Come ottenere la chiave/valore precedente e la chiave/valore successivo in Mappe

+3

La maggior parte delle mappe non ha un ordine garantito, quindi improbabile. –

+3

'LinkedHashMap' - vedere questo http://stackoverflow.com/questions/2889777/difference-between-hashmap-linkedhashmap-and-treemap – ChristofferPass

+1

Risposta breve: No, non affidabile. Un 'Set' non ha un ordine specificato, quindi. È possibile salvare la voce precedente/successiva in una variabile/variabili separate, ma l'ordine delle voci potrebbe non essere lo stesso nelle chiamate successive di questa parte di codice. –

risposta

8

È possibile utilizzare NavigableMap per questo, che il ritorno iteratore entrySet() s' voci in ascending key order:

NavigableMap<Double, String> myMap = new TreeMap<>(); 

//... 

for (Map.Entry<Double, String> e : myMap.entrySet()) { 
    Map.Entry<Double, String> next = myMap.higherEntry(e.getKey()); // next 
    Map.Entry<Double, String> prev = myMap.lowerEntry(e.getKey()); // previous 

    // do work with next and prev 
} 

Ogni voce recupero è O (log N), quindi per la piena iterazione questo non è l'approccio più efficace. Per essere più efficaci, in iterazione è sufficiente ricordare le ultime 3 voci e utilizzare 1st come prev, 2nd come corrente e 3rd come next, come @Malt suggests.

+0

grazie, questo è quello di cui avevo bisogno. – arem

1

Un TreeMap è un OrderedMap e un NavigableMap e vi permetterà di eseguire iterazioni in avanti e indietro, che consente di accedere chiavi precedenti e successivi rispettivamente con lowerKey() e higherKey(). Tuttavia potrebbe non essere la soluzione migliore.

Puoi descrivere il problema reale che stai cercando di risolvere e possiamo darti una soluzione più adatta?

+0

Ho bisogno di generare una chiave con ogni nuova aggiunta nella mappa. Il calcolo dipende dal valore precedente e successivo e la mappa deve essere ordinata in base alla chiave, che determina la posizione della nuova aggiunta. – arem

Problemi correlati