2015-10-10 14 views
5

Android ha la propria implementazione di HashMap, che non usa Autoboxing ed è in qualche modo migliore per le prestazioni (CPU o RAM)?Quando utilizzare ArrayMap di Android anziché HashMap?

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

Da quello che ho letto qui, devo sostituire i miei oggetti HashMap con oggetti ArrayMap se ho HashMaps la cui dimensione è inferiore a centinaia di dischi e sarà spesso scritti. E non ha senso sostituire i miei HashMaps con ArrayMaps se contengono centinaia di oggetti e verranno scritti una sola volta e letti frequentemente. Ho ragione?

+0

* che non utilizza Autoboxing *, dove l'hai letto? – Blackbelt

+0

"Mantiene i suoi mapping in una struttura di dati dell'array - una serie intera di codici hash per ogni oggetto e una matrice Object delle coppie chiave/valore. Ciò gli consente di evitare di dover creare un oggetto extra per ogni voce inserita alla mappa " –

+0

ArrayMap memorizza riferimenti a oggetti sia per le chiavi che per i valori, quindi non impedisce la boxe. Contrariamente alle classi SparseArray che possono impedire la boxe per chiavi e/o valori memorizzando tipi primitivi. Quello che afferma la documentazione è che rispetto alla classe HashMap, ArrayMap non crea alcun oggetto intermedio "Map.Entry" per ciascuna coppia chiave-valore. – BladeCoder

risposta

3

C'è qualche motivo per tentare una tale sostituzione?

Se è necessario migliorare le prestazioni, è necessario prendere delle misure prima e dopo la sostituzione e verificare se le sostituzioni sono state d'aiuto.

Probabilmente, non vale la pena.

5

Si dovrebbe dare un'occhiata a questo video: https://www.youtube.com/watch?v=ORgucLTtTDI
situazioni perfetto:
1. piccolo numero di elementi (< 1000), con un sacco di accessi o gli inserimenti ed eliminazioni sono abbastanza infrequente che il sovraccarico di farlo non è davvero notato.
2. contenitori di mappe - mappe di mappe in cui il submap tende ad avere un basso numero di elementi e spesso itera su poi molto tempo.

2

ArrayMap utilizza molto meno memoria di HashMap ed è consigliato per un massimo di alcune centinaia di elementi, soprattutto se la mappa non viene aggiornata di frequente. Spendere meno tempo per allocare e liberare memoria può anche fornire alcuni guadagni in termini di prestazioni generali.

Le prestazioni dell'aggiornamento sono un po 'peggiori perché ogni inserto richiede una copia dell'array. Leggi le prestazioni è paragonabile per un piccolo numero di elementi e utilizza la ricerca binaria.

Problemi correlati