2010-10-14 3 views
5

Кто-то сказал, что хешмапы довольно медленные. Поэтому мне просто интересно, использовать ли hashmap или логику коммутатора.Зачем использовать хэш-карту?

Мое требование таково. У меня есть набор CountryNames и CountryCodes. В моем списке ListView отображаются имена стран. Когда щелкнут элемент названия страны, мне нужно Toast CountryCode.

В таком случае, я должен поддерживать HashMap из CountryNames и коды и получить доступ к этому, чтобы получить соответствующий код ?:

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

Или лучше, чтобы написать кожух переключателя, как так

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

//etc 
} 

Что происходит быстрее? Если не Hashmaps, то в каких практических сценариях будет использоваться карта?

-Kiki

+3

Этот вопрос не является специфичным для Android. – Brian

ответ

14

Для двух значений переключатель будет быстрее. Хешмап всегда будет, по крайней мере, проверять равенство вашего ключа, поэтому он не может выполнить один или два теста .equals().
Для многих значений хеш будет быстрее. Коммутатор должен проверять каждое значение, пока оно не найдет правильный.

Для небольшого количества значений (например, до 10 или около того), предпочитайте переключатель. Это будет легче и быстрее.
Для большого количества значений (более 50) предпочитайте хэш. Хешу не нужно проверять все значения, поэтому он будет быстрее, чем переключатель, когда число значений увеличивается. Для 10 ~ 50 значений, я предлагаю вам сделать то, что, по вашему мнению, более читаемо, потому что производительность будет похожа.

Теперь, если вы изучаете экстремальные характеристики статических строк, известных во время компиляции, вы можете изучить инструменты генерации кода, такие как gnuperf.
Если вы не знаете свои строки во время компиляции, но знаете, что они будут прилично короткими и прилично однородными по длине или с общими префиксами, вы, вероятно, будете быстрее всего иметь структуру данных Trie.
Если вы хотите сохранить производительность на множестве очень разнородных строк или на объектах, которые могут не быть строками, то HashMap - это путь. Это очень много непобедимых, когда количество объектов очень велико (в миллиардах или более).

+0

Обратите внимание, что в этом конкретном случае вы можете использовать что-то вроде SparseArray от Android, чтобы избежать использования autoboxing/unboxing. –

Смежные вопросы