2016-02-25 17 views
5

In Java, TreeMap<K,V> utilizza un albero RB per memorizzare le voci, consentendo l'iterazione in ordine utilizzando, garantendo l'inserimento e la ricerca nel tempo di log (N).Java: iteratore dalla voce TreeMap?

TreeMap fornisce anche metodi per trovare limiti superiori e inferiori per una data chiave: map.floorEntry(k), map.ceilingEntry(), map.lowerEntry(k) e map.higherEntry(). Tuttavia, il valore di ritorno di questi è un'istanza Map.Entry<K,V> e non consentirà direttamente a una visita di voci vicine. Volevo visitare potenziali vicini di casa di un'ipotetica voce data la sua chiave.

C'è un modo per ottenere un iteratore da una voce TreeMap o fare quello che sto cercando di fare?

Essere più abituati a std::map<K,V> classe C++ s ', io sono ad una perdita qui ...

NOTA io sono aperto a una soluzione che utilizza una libreria di contenitore diverso da java.util di fintanto che ha un contenitore di mappe ordinato con alcune garanzie di complessità temporale ragionevole.

risposta

2

È possibile richiedere la chiave di restituzione Map.Entry<K, V> come parametro in tailMap(K fromKey) o headMap(K toKey) e iterare il risultato.

+0

Questo è quasi quello che sto cercando; tuttavia, considerando che voglio ottenere entrambe le voci immediatamente prima e immediatamente dopo una determinata chiave, dovrei chiamare entrambi i metodi, ovvero due ricerche, il che sembra uno spreco di cicli della CPU. – Shadocko

+0

OK, scusa ho frainteso la tua risposta, ovviamente intendevi 'map.tailMap (map.lowerEntry (k) .getKey())'. Funzionerebbe ma richiede ancora 2 ricerche. – Shadocko

+0

Un'altra soluzione: hai creato il tuo iteratore di TreeMap per le tue esigenze, ma non è un compito facile – Eva

Problemi correlati