Być może istnieje nazwa tego, czego chcę, ale nie jestem tego świadomy. Potrzebuję czegoś podobnego do LinkedHashMap
języka Java, ale zwraca wartość „poprzednią”, jeśli pod określonym kluczem nie ma żadnej wartości.
To znaczy, mam listę obiektów przechowywanych przez klucz liczby całkowitej (która w moim przypadku jest w jednostkach czasu):
; key->value
10->A
15->B
20->C
Gdybym więc zapytał o wartość dla klucza 0–9, zwróciłbym null
. Specjalną częścią jest to, że jeśli zapytałem o coś 10 <= i <= 14, zwróci A. Lub, dla i> = 20, zwróci C.
Czy istnieje do tego struktura danych?
java
data-structures
Nacięcie
źródło
źródło
Odpowiedzi:
Szukasz NavigableMap . Jest to podtyp SortedMap, który ma również pewne funkcje oprócz charakteru sortowanej mapy. Zauważ, że mapa nawigacyjna „ma zastąpić interfejs SortedMap”. ( Udoskonalenia środowiska Java SE 6 Collections ). Wszystko, co obecnie implementuje,
SortedMap
implementujeNavigableMap
i to prawdopodobnie pozostanie prawdą.W szczególności metoda,
floorKey(K key)
która „zwraca największy klucz mniejszy lub równy podanemu kluczowi, lub null, jeśli takiego klucza nie ma.To tylko jedna z wielu metod, które pozwalają uzyskać określone klucze lub mapy.
Java ma dwie implementacje NavigableMap - TreeMap i ConcurrentSkipListMap .
Jeśli spojrzysz na pomysł / implementację listy pominięć , zobaczysz, dlaczego tak dobrze działałaby z taką strukturą i jej zapytaniami.
źródło
LinkedHashMap
on wspomina. AniTreeMap
nieConcurrentSkipListMap
są uporządkowane według czasu wstawieniaLinkedHashMap
, ale raczej są uporządkowane według naturalnegoComparator
lub klucza Naturalnego Porządkowania, jeśli są realizowaneComparable
.To, czego szukasz, to tablica symboli, która obsługuje uporządkowane operacje. A w twoim przypadku jest to operacja na podłodze.
Implementacja skrótu tablicy symboli jest najszybsza, ale nie oferuje tych uporządkowanych operacji.
Ale implementacja drzewa tabel symboli ma. Przykładem tego w Javie jest klasa TreeMap
źródło