(Istnieje kilka pytań o czas efektywny nielicznych tablic ale szukam wydajności pamięci.)pamięci efektywny rzadki tablicy w Javie
muszę równowartość List<T>
lub Map<Integer,T>
który
- Może rosnąć na żądanie, ustawiając klucz większy niż kiedykolwiek napotkany. (Można założyć, że klucze nie są nieujemne).
- Jest tak wydajny pod względem pamięci, jak
ArrayList<T>
w przypadku, gdy większość wskaźników nie jestnull
, tj. Gdy rzeczywiste dane nie są bardzo rzadkie. - Gdy wskaźniki są rzadkie, zużywa przestrzeń proporcjonalną do liczby indeksów innych niż
null
. - Używa mniej pamięci niż
HashMap<Integer,T>
(ponieważ to autoboxuje klucze i prawdopodobnie nie korzysta z klucza skalarnego). - Może uzyskać lub ustawić element w dzienniku zamortyzowanym (N), gdzie N jest liczbą pozycji: nie musi być czasem liniowym, wyszukiwanie binarne byłoby dopuszczalne.
- Zaimplementowane w niewirusowej, czystej bibliotece Javy (najlepiej w Maven Central).
Czy ktoś wie o takiej klasie użytkowej?
Spodziewałam się, że Commons Kolekcje będą miały jeden, ale nie wydaje się.
Natknąłem się na org.apache.commons.math.util.OpenIntToFieldHashMap
, który wygląda niemal prawe, z wyjątkiem tego, że jest to typ FieldElement
, który wydaje się być nieuzasadniony; Chcę tylko T extends Object
. Wygląda na to, że łatwo byłoby zmienić jego kod źródłowy na bardziej ogólny, chociaż wolałbym używać zależności binarnej, jeśli jest dostępna.
To wygląda dobrze. Próbowałem dostosować 'OpenIntToFieldHashMap' do ogólnego typu wartości, który wydaje się działać z ~ 10min pracy, ale działa on tylko marginalnie lepiej niż' TIntObjectMap'. –