java - 为什么要使用 HashMap ?

标签 java android listview hashmap switch-statement

有人告诉我 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/

相关文章:

java - 在斯坦福 CoreNLP Java 中的句子(字符串)上创建 TreeAnnotation 解析器

java - 无需安装即可部署 Magnolia CMS

java - Apache POI XSSFPivotTable setDefaultSubtotal

java - 是否可以使图形对象最终用于内部循环?

android - WVGA800 和 WVGA854 的资源不同?

C# WPF listview不更新

android - 以编程方式将选项卡添加到选项卡主机

android - 将用户输入保存到 SharedPreferences 并将值设置为 EdiTtext

vb.net - 每行有2个值的组合框有什么办法吗?

android - 如何从 AlertDialog 中由光标填充的 ListView 获取选中的值?