迭代hashmap是一个好习惯吗?

时间:2014-10-16 17:39:35

标签: java performance for-loop hash collections

这是一个非常通用的问题,我只是举了一个Java HashMap的例子。

我有一个Hashmap。

Map<Integer,Integer> idPriceMap=new HashMap<Integer,Integer>();
idPriceMap.put(10,20);
idPriceMap.put(11,25);
idPriceMap.put(12,0);
idPriceMap.put(13,100);
idPriceMap.put(14,20);
idPriceMap.put(15,40);
idPriceMap.put(16,90);

要求可能有所不同,例如:

UseCase1:我想要一个特定键的值,假设我知道键(PS。我知道在这个场景中HashMap是最好的结构)

Usecase2:我想得到所有的值。

现在只考虑UseCase2。问题是:这是好的做法吗?

在另一种情况下,我有UseCase1&amp; UseCase2同时使用它们。你会建议什么?

我尝试谷歌它,我得到的是迭代HashMap的最佳方法。 :(

2 个答案:

答案 0 :(得分:0)

UseCase1(特定键的值):hashap是最好的结构,是的

UseCase2(所有值):因为你想要所有的值,它的散列图,列表或树是无关紧要的

所以我不确定你的问题是什么。但是如果你谷歌的话,你可以轻松获得不同数据结构的时间复杂度: http://en.wikipedia.org/wiki/Hash_table(见右侧大O符号)

答案 1 :(得分:0)

如果您使用混合使用方案,则您的问题没有通用答案。这取决于您的请求的频率和分布(方案1或2)以及地图内容的波动性。

建议:只需使用标准哈希映射即可。然后分析您的应用程序大多数情况下,瓶颈并不是您首先想到的,而是通过其他地方的廉价变化来实现性能提升。

如果哈希图确实是瓶颈:

再次询问您的用法的具体频率;)

如果你想做“过早优化”(参见好旧的c2 wiki:http://c2.com/cgi/wiki?PrematureOptimization),那么只需将你的值放在一个单独的数组中,以加快对完整值的请求。但是如果你有很多修改,那么你的整体表现会降低。这与拥有数据库索引是一样的......

希望这很有用。