Efektywny sposób na znalezienie najbliższej przyszłej daty

0

Cześć

Ma ktoś jakiś pomysł na efektywne wyciągnięcie najbliższej przyszłej daty z danej kolekcji ?

Flow jest następujący otrzymujemy jakąś date w argumencie i z kolekcji dat wybieramy najbliższą podanej dacie ale nie większą niż pewna data.
Używam do tego joda time. Teraz robię fora po wszystkich elementach i sortowanie bąbelkowe. Natomiast zastanawiam się czy istnieje szybsze rozwiązanie.

0

Moglbys uzyc NavigableSet (interfejs), a konkretnie TreeSet. Tworzysz instancje i dodajesz do niego daty, ktore sa sortowane podczas dodawania (rosnoco lub malejaco, jak chcesz), a nastepnie masz do wyboru metody: headSet lub tailSet (zeby zwrocic subset dat mniejszych niz ta zadana); nastepnie masz metody higher i lower, ktore zwroca alemenet wiekszy / mniejszy niz podany element lub null.

0

Albo compareTo jesli obiekt jest Comparable, albo przy tworzeniu TreeSet mozna podac implementacje Comparatora ktory pozwala na sortowanie wg. twojego widzimisie.

0

Zależy jak bardzo często będziesz używał danej funkcji. Jeśli rzadko i dla małych kolekcji to możesz użyć czegokolwiek np. właśnie kolekcji przechowujacej posortowane dane (treeset). Jeśli kolekcje będą ogromne, a ty będziesz robił zapytania stosunkowo rzadko to TreeSet może być nieotymalny: wstawianie zajmuje O(log n) czyli dla całej kolekcji masz O(n log n), a z drugiej strony taki HashSet ma złożoność wstawiania O(1), a przeglądnięcie całej kolekcji w celu znalezienia maxa/mina to O(n). A robisz to mniej więcej tak: iterujesz po całej kolekcji porónując kolejne daty z "najbardziej przyszłą" z poprzednio ustalonych (początkowo możesz ustawić ją na np. pierwszy element kolekcji) i w przypadku, gdy ta którą badamy teraz jest większa od currentmaxa to ustalasz currentmax na badaną.

Używanie sortowania, zwłaszcza kwadratowego jest zbrodnią na wydajności.

0

Ja zalozylem ze ta kolekcje tworzy raz, w innym wypadku masz racje.

0

Spoko to będzie tylko 10 elementów :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1