In Java verwendet TreeMap<K,V>
einen RB-Baum zum Speichern von Einträgen, der eine Iteration in Reihenfolge unter Verwendung von map.entrySet().iterator()
ermöglicht, während Einfügung und Nachschlagen in Protokoll (N) -Zeit garantiert wird.Java: Iterator vom TreeMap-Eintrag?
TreeMap stellt auch Verfahren zur Ober- und Untergrenzen für einen bestimmten Schlüssel zu finden: map.floorEntry(k)
, map.ceilingEntry()
, map.lowerEntry(k)
und map.higherEntry()
. Der Rückgabewert von diesen ist jedoch eine Map.Entry<K,V>
Instanz und wird nicht direkt erlauben, benachbarte Einträge zu besuchen. Ich wollte Möchtegern-Nachbarn eines hypothetischen Eintrags mit seinem Schlüssel besuchen.
Gibt es eine Möglichkeit, einen Iterator von einem TreeMap-Eintrag zu erhalten oder zu tun, was ich versuche?
Sein mehr daran gewöhnt, C++ 's std::map<K,V>
Klasse, ich ratlos bin hier ...
HINWEIS Ich bin offen für eine Lösung so lange einen Container andere Bibliothek als java.util der Verwendung, da sie hat ein sortierter Kartencontainer mit einiger zeitlicher Komplexitätsgarantie.
Das ist fast, was ich suche; In Anbetracht dessen, dass ich sowohl die Einträge erhalten möchte, die unmittelbar vor und unmittelbar hinter einem bestimmten Schlüssel liegen, würde ich beide Methoden aufrufen müssen, was zwei Lookups bedeutet, was wie eine Verschwendung von CPU-Zyklen erscheint. – Shadocko
OK, Entschuldigung, ich habe deine Antwort falsch verstanden, du meintest offensichtlich 'map.tailMap (map.lowerEntry (k) .getKey())'. Das würde funktionieren, erfordert aber immer noch 2 Nachschlagevorgänge. – Shadocko
Eine andere Lösung - Ihren eigenen Iterator der TreeMap für Ihre Bedürfnisse gemacht, aber es ist keine leichte Aufgabe – Eva