W języku Java, TreeMap<K,V>
używa drzewa RB do przechowywania wpisów, umożliwiając iterację w kolejności przy użyciu map.entrySet().iterator()
, gwarantując jednocześnie wstawienie i wyszukiwanie w log (N) czasie.Java: iterator z wpisu TreeMap?
TreeMap zapewnia również metody wyszukiwania górnych i dolnych granic dla danego klucza: map.floorEntry(k)
, map.ceilingEntry()
, map.lowerEntry(k)
i map.higherEntry()
. Jednak wartość zwracana z nich to instancja Map.Entry<K,V>
i nie zezwala ona bezpośrednio na odwiedzanie sąsiednich wpisów. Chciałem odwiedzić potencjalnych sąsiadów hipotetycznego wpisu, biorąc pod uwagę jego klucz.
Czy istnieje sposób, aby uzyskać iterator z wpisu TreeMap lub zrobić to, co próbuję zrobić?
są bardziej przyzwyczajeni do C++ 's std::map<K,V>
klasie, jestem w rozterce tutaj ...
UWAGA Jestem otwarty na rozwiązania przy użyciu biblioteki kontenera innego niż java.util na tak długo, jak to ma posortowany pojemnik mapy z pewnymi gwarancjami złożoności czasowej.
To prawie to, czego szukam; jednak biorąc pod uwagę, że chcę uzyskać oba wpisy, które są tuż przed i zaraz po danym kluczem, musiałbym wywołać obie metody, co oznacza dwa wyszukiwania, które wydają się marnowaniem cykli procesora. – Shadocko
OK, przepraszam, że źle zrozumiałem twoją odpowiedź, oczywiście miałeś na myśli 'map.tailMap (map.lowerEntry (k) .getKey())'. To by działało, ale nadal wymaga 2 wyszukiwań. – Shadocko
Kolejne rozwiązanie - stworzyłeś własny iterator mapy drzewa dla swoich potrzeb, ale nie jest to łatwe zadanie – Eva