Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 迭代hashmap是一种好的做法吗?_Java_Performance_For Loop_Hash_Collections - Fatal编程技术网

Java 迭代hashmap是一种好的做法吗?

Java 迭代hashmap是一种好的做法吗?,java,performance,for-loop,hash,collections,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.pu

这是一个非常通用的问题,我只是举一个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);
要求可能不同,例如:

用例1:假设我知道密钥PS,我想要一个特定密钥的值。我知道在这个场景中HashMap是最好的结构

用例2:我想要得到所有的值

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

在另一个场景中,我同时拥有UseCase1和UseCase2。你有什么建议


我试着用谷歌搜索它,我得到的只是迭代HashMap的最佳方法

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

UseCase2所有值:因为您需要所有值,所以它是哈希映射、列表还是树并不重要

所以我不确定你的问题是什么。但是,如果您在谷歌上搜索不同数据结构,则很容易获得其时间复杂度:
请参见右侧的大O符号

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

建议:只需使用标准哈希映射。然后分析你的应用程序。大多数情况下,瓶颈并不是您首先期望的地方,您可以通过在其他地方进行廉价更改来获得性能提升

如果哈希映射确实是瓶颈:

再问一次,具体使用频率

如果您想进行过早的优化,请参阅旧的c2 wiki:,然后将您的值放在一个单独的数组中,以稍微加快对完整值的请求。但是如果你有很多修改,那么你的整体性能就会下降。这与是否有数据库索引是一样的


希望这是有用的。

不知道你到底在问什么?是hashmap可用于两种情况:按键查找值或迭代所有值。@brso05迭代hashmap是一种好的做法吗??我们也可以根据用例迭代列表,哪一个是最好的??希望我现在明白了。如果您需要两种情况,那么HashMap如果您只需要迭代,那么任何一种都可以。HashMap只允许key=value键不能重复。如果您不需要访问与键关联的特定值,而只需要访问值本身,那么列表就可以了。遍历映射是完全正常的。为什么这会是一种不好的做法?您对值的定义是什么,它是由映射接口定义的吗?