Java 为什么要使用hashmap?

Java 为什么要使用hashmap?,java,android,listview,hashmap,switch-statement,Java,Android,Listview,Hashmap,Switch Statement,有人告诉我hashmaps相当慢。所以我只是想知道是使用hashmap还是开关案例逻辑 我的要求是这样。我有一套国家名称和国家代码。我的列表视图显示国家的名称。单击国家名称项目时,我必须为国家代码干杯 在这种情况下,我是否应该维护一个国家名称和代码的HashMap并访问它以获得相应的代码 myMap.put("US", 355); myMap.put("UK", 459); //etc 还是这样写一个开关盒更好 switch (vCountryNamePos): { case 0: //U

有人告诉我hashmaps相当慢。所以我只是想知道是使用hashmap还是开关案例逻辑

我的要求是这样。我有一套国家名称和国家代码。我的列表视图显示国家的名称。单击国家名称项目时,我必须为国家代码干杯

在这种情况下,我是否应该维护一个国家名称和代码的HashMap并访问它以获得相应的代码

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,那么在什么实际场景中会使用Map


-Kiki

对于两个值,切换速度更快。hashmap至少会检查您的密钥是否相等,所以它不能超过一个或两个.equals()测试。
对于许多值,哈希将更快。开关必须测试每个值,直到找到正确的值

对于少量值(最多10个左右),请选择开关。它会更轻更快。
对于大量值(超过50个),首选哈希。散列不必检查所有值,因此当值的数量增加时,它将比开关更快。 对于10~50个值,我建议你做你认为更可读的事情,因为性能会相似

现在,如果您正在研究编译时已知的静态字符串的极限性能,您可以研究代码生成工具,如gnuperf。
如果您在编译时不知道字符串的长度,但知道它们将非常短且长度相当一致,或者使用通用前缀,那么使用Trie数据结构可能是最快的。

如果您想在大量异构字符串上保持性能,或者在可能不是字符串的对象上保持性能,那么HashMap就是一个不错的选择。当对象的数量非常大(数十亿或更多)时,这几乎是无与伦比的。

这个问题似乎不是特定于android的。请注意,在这种特殊情况下,您可能希望使用android的SparseArray之类的工具来避免自动装箱/取消装箱。