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.
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
OK, scusa ho frainteso la tua risposta, ovviamente intendevi 'map.tailMap (map.lowerEntry (k) .getKey())'. Funzionerebbe ma richiede ancora 2 ricerche. – Shadocko
Un'altra soluzione: hai creato il tuo iteratore di TreeMap per le tue esigenze, ma non è un compito facile – Eva