有人告诉我 HashMap 相当慢。所以我只是想知道是使用 hashmap 还是 switch case 逻辑。
我的要求是这样的。我有一组 CountryNames 和 CountryCodes。我的 ListView 显示国家的名称。单击国家名称项时,我必须 Toast CountryCode。
在这种情况下,我是否应该维护一个 CountryNames 和 Codes 的 HashMap 并访问它以获取相应的 Code?:
myMap.put("US", 355);
myMap.put("UK", 459);
//etc
还是像这样写一个switch case比较好
switch (vCountryNamePos):
{
case 0: //US
vCountryCode = 355;
break;
case 1: //UK
vCountryCode = 459;
break;
//etc
}
哪个更快?如果不是Hashmaps,那么在哪些实际场景中会用到Map?
-琪琪
最佳答案
对于两个值,switch 会更快。 HashMap 将始终至少检查您的 key 是否相等,因此它无法通过一两个 .equals() 测试。
对于许多值,散列会更快。开关必须测试每个值,直到找到正确的值。
对于少量值(比如最多 10 个左右),更喜欢开关。它会更轻更快。
对于大量值(超过 50 个),更喜欢散列。散列不必检查所有值,因此当值的数量增加时它会比 switch 更快。
对于 10~50 个值,我建议您做您认为更具可读性的操作,因为性能会相似。
现在,如果您正在研究编译时已知的静态字符串的极端性能,您可以研究代码生成工具,如 gnuperf。
如果您在编译时不知道您的字符串,但您知道它们会非常短且长度非常均匀,或者具有通用前缀,那么您可能会使用 Trie 数据结构最快。
如果你想在大量非常异构的字符串上保持性能,或者在可能不是字符串的对象上保持性能,那么 HashMap 是可行的方法。当对象数量非常多(数十亿或更多)时,它几乎是无与伦比的。
关于java - 为什么要使用 HashMap ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3930256/