这是一个非常通用的问题,我只是举了一个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的最佳方法。 :(
答案 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),那么只需将你的值放在一个单独的数组中,以加快对完整值的请求。但是如果你有很多修改,那么你的整体表现会降低。这与拥有数据库索引是一样的......
希望这很有用。