2010-10-14 20 views
5

Birisi bana hashmapslerin oldukça yavaş olduğunu söyledi. Bu yüzden sadece hashmap veya bir anahtar durum mantığı kullanıp kullanmamayı merak ediyorum.Neden hashmap kullanıyorsunuz?

Benim gereksinimim budur. Bir dizi CountryNames ve CountryCodes var. ListView, ülkelerin isimlerini gösterir. Bir ülke adı öğesine tıklandığında CountryCode'u Tost Yapmalıyım. Böyle bir senaryoda

, ben CountryNames ve Kodları bir HashMap korumak ve bu karşılık gelen kod ?:

myMap.put("US", 355); 
myMap.put("UK", 459); 
//etc 

olsun Ya da daha iyi bu yüzden

switch (vCountryNamePos): 
{ 
case 0: //US 
vCountryCode = 355; 
break; 
case 1: //UK 
vCountryCode = 459; 
break; 

//etc 
} 
gibi bir switch case yazmaktır erişim olmalıdır

Hangisi daha hızlıdır? Hashmaps değilse, o zaman bir harita hangi pratik senaryolarda kullanılabilir?

-Kiki

+3

Bu soru, Android'e özgü görünmüyor. – Brian

cevap

14

İki değer için, bir anahtar daha hızlı olacaktır. Bir hashmap her zaman en azından anahtarınızın eşitliğini kontrol edecektir, bu yüzden bir veya iki eşittir() testlerini geçemez.
Birçok değer için bir karma daha hızlı olacaktır. Bir anahtar, doğru değeri bulana kadar her değeri test etmelidir.

Az sayıda değer için (en fazla 10'a kadar), bir anahtarı tercih edin. Daha hafif ve daha hızlı olacak.
Çok sayıda değer için (50'nin üzerinde), bir hash tercih edin. Bir hashın tüm değerleri kontrol etmesi gerekmez, bu yüzden değerlerin sayısı arttığında bir anahtardan daha hızlı olacaktır. 10 ~ 50 değerleri için, performansın benzer olacağından, daha okunaklı olduğunu düşündüğünüz şeyi yapmanızı öneririm.

Şimdi derleme zamanında bilinen statik dizilerde aşırı performans arıyorsanız, gnuperf gibi kod oluşturma araçlarına bakabilirsiniz.
Dizelerinizi derleme süresinde bilmiyorsanız, ancak kısa ve terbiyeli olarak uzun veya tekdüze olarak tekdüze olacaklarını biliyorsunuz, muhtemelen bir Trie veri yapısıyla en hızlı olacaksınız.
Performansı çok sayıda çok heterojen dizede veya Dizeleri olmayan nesnelerde tutmak istiyorsanız, HashMap gitmenin yoludur. Nesnelerin sayısı çok yüksek olduğunda (milyarlarca veya daha fazla), oldukça rakipsizdir.

+0

Bu özel durumda, otomatik kutulama/kutuklamadan kaçınmak için Android'in SparseArray'i gibi bir şey kullanmak isteyebileceğinizi unutmayın. –

İlgili konular