2015-10-10 15 views
5

Android ma własną implementację HashMap, która nie korzysta z funkcji Autoboxing i jest w jakiś sposób lepsza pod względem wydajności (CPU lub RAM)?Kiedy używać mapy ArrayMap dla Androida zamiast HashMap?

https://developer.android.com/reference/android/support/v4/util/ArrayMap.html

Z tego co czytałem tutaj, muszę wymienić moje obiekty HashMap z obiektami ArrayMap jeśli mam HashMaps których wielkość jest poniżej setki rejestrów i będą często na piśmie. I nie ma sensu zamieniać moich HashMaps na ArrayMaps, jeśli mają one zawierać setki obiektów i będą zapisywane na raz i często czytane. Mam rację?

+0

* Który nie korzysta z Autoboxing *, gdzie to przeczytałeś? – Blackbelt

+0

"Zachowuje swoje odwzorowania w strukturze danych tablicowych - całkowitą tablicę kodów skrótu dla każdego elementu i tablicę obiektów par klucz/wartość, co pozwala uniknąć konieczności tworzenia dodatkowego obiektu dla każdego wprowadzonego wpisu do mapy " –

+0

ArrayMap przechowuje odwołania do obiektów dla obu kluczy i wartości, dzięki czemu nie zapobiega boksu. W przeciwieństwie do klas SparseArray, które mogą zapobiegać boksowaniu kluczy i/lub wartości poprzez przechowywanie typów pierwotnych. W dokumentacji stwierdza się, że w porównaniu do klasy HashMap, ArrayMap nie tworzy żadnego pośredniego obiektu "Map.Entry" dla każdej pary klucz-wartość. – BladeCoder

Odpowiedz

3

Czy istnieje jakikolwiek powód, aby podjąć próbę takiego zastąpienia?

Jeśli ma to poprawić wydajność, należy podjąć działania przed wymianą i po wymianie i sprawdzić, czy zamienniki pomogły.

Prawdopodobnie nie warto.

5

Należy spojrzeć na ten film: https://www.youtube.com/watch?v=ORgucLTtTDI
Doskonałe sytuacjach:
1. niewielka liczba elementów (< 1000) z dużą ilością wejść lub insercji i delecji są na tyle rzadkie, że narzut robi tak tak naprawdę nie jest zauważone.
2. pojemniki z mapami - mapy map, w których submaps ma zazwyczaj małą liczbę pozycji i często powtarzają się przez to dużo czasu.

2

ArrayMap wykorzystuje znacznie mniej pamięci niż HashMap i jest zalecany do kilkuset elementów, zwłaszcza jeśli mapa nie jest często aktualizowana. Poświęcenie mniejszej ilości czasu na przydzielanie i zwalnianie pamięci może również zapewnić ogólne ogólne zyski wydajności.

Aktualizacja wydajności jest nieco gorsza, ponieważ każda wstawka wymaga kopii tablicy. Wydajność odczytu jest porównywalna dla niewielkiej liczby elementów i wykorzystuje wyszukiwanie binarne.

Powiązane problemy