Зачем использовать хэш-карту? - PullRequest
5 голосов
/ 14 октября 2010

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

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

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

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

1 Ответ

14 голосов
/ 14 октября 2010

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

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

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

...