2015-10-10 18 views
5

Android'in, Autoboxing'i kullanmayan ve bir şekilde performans (CPU veya RAM) için daha iyi olan HashMap'in kendi uygulaması var mı? Ben HashMaps olan boyutu kayıtlarının yüzlerce altındadır ve sık sık yazılır varsa ben burada okumak kadarıylaAndroid'in HashMap yerine ArrayMap'i ne zaman kullanmalısınız?

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

, ben ArrayMap nesnelerle benim HashMap nesneleri değiştirmelisiniz. Ve HashMaps'ımın, yüzlerce nesne içerecek ve bir kez yazılacak ve sıkça okuyacaklarsa ArrayMaps ile değiştirmenin bir anlamı yok. Doğrumuyum?

+0

* hangi Autoboxing * 'i kullanmıyor, bunu okudun mu? – Blackbelt

+0

"Eşleme verilerini bir dizi veri yapısında tutar - her öğe için bir karma kod dizisi ve anahtar/değer çiftlerinin bir Nesne dizisi. Bu, her giriş için ek bir nesne oluşturulmasını engellemeye olanak tanır. haritaya " –

+0

ArrayMap, hem anahtarlar hem de değerler için nesne referanslarını saklar, bu nedenle boksu engellemez. İlkel türleri depolayarak anahtarlar ve/veya değerler için boksu engelleyebilen SparseArray sınıflarının aksine. Belgelerin durumları, HashMap sınıfıyla karşılaştırıldığında, ArrayMap her bir anahtar/değer çifti için herhangi bir "Map.Entry" ara nesnesini oluşturmaz. – BladeCoder

cevap

3

Böyle bir değiştirme girişiminde bulunmanız için herhangi bir sebep var mı?

Performansı arttırmak istiyorsa, değiştirmeden önce ve sonra önlem almanız ve değiştirmelerin işe yarayıp yaramadığını görmek zorundasınız. Muhtemelen, bu çabaya değmeyecektir.

Bu videonun bakmak gerekir
5

: https://www.youtube.com/watch?v=ORgucLTtTDI
Mükemmel durumlar:
erişimlerin bir sürü veya eklemeler ve silmeler ile öğeler (1000 <) 1. Az sayıda yeterince seyrek olacak şekilde yapmanın havai gerçekten fark edilmez.
2. Harita kapları - alt haritaların az sayıda öğeye sahip olma eğiliminde olduğu ve zaman zaman çok fazla yinelenen haritaların haritaları.

2

ArrayMap, HashMap'ten daha az bellek kullanır ve özellikle harita sık sık güncellenmiyorsa, birkaç yüz öğeye kadar önerilir. Bellek ayırmak ve boşaltmak için daha az zaman harcamak da bazı genel performans kazançları sağlayabilir.

Güncelleştirme performansı biraz daha kötü olduğundan, herhangi bir ek dizi bir dizi kopyası gerektirdiğinden. Okuma performansı az sayıda öğe ile karşılaştırılabilir ve ikili arama kullanır.

İlgili konular