Java 在hashmap上迭代:';对于';使用随机访问或迭代器循环?

Java 在hashmap上迭代:';对于';使用随机访问或迭代器循环?,java,hashtable,hashmap,Java,Hashtable,Hashmap,我需要迭代Hashmap以检索其中存储的值 作为奖励,我还有一份钥匙清单。因此,我可以选择使用迭代器或通过for循环中的随机访问对其进行迭代。这两个选项中的哪一个可以提供更好的性能?没有真正的区别,但是如果您通过调用map.keySet()来获取密钥列表,那么只需在entrySet()上迭代即可: for (Object O : TheMap.values()) { // Do something } for(Map.Entry:Map.entrySet()){ ... } 通过这种

我需要迭代Hashmap以检索其中存储的值


作为奖励,我还有一份钥匙清单。因此,我可以选择使用迭代器或通过for循环中的随机访问对其进行迭代。这两个选项中的哪一个可以提供更好的性能?

没有真正的区别,但是如果您通过调用
map.keySet()
来获取密钥列表,那么只需在
entrySet()上迭代即可:

for (Object O : TheMap.values()) {
    // Do something
}
for(Map.Entry:Map.entrySet()){
...
}

通过这种方式,您可以避免构建一组键,然后查找每个键的值。

如果您只需要这些值,而不需要知道键和值之间的关系,那么迭代器将更快,因为您可以节省计算键的has值的时间。

直观地说,我会说使用迭代器,因为它可能不需要任何查找,只需直接提供O(n)性能。请注意,您的最佳案例性能将是O(n),因为您正在接触集合的每个元素,并且您的平均案例性能将是您的访问方法的大O的O(n)倍。因为散列查找有很高的概率O(1),所以很可能仍然是O(n),但是使用迭代器,因为您只是在计算下一个位置,所以(我认为)保证了对下一个元素的O(1)访问。这就是我选择迭代器的原因。加上下一个元素计算的固定时间可能比哈希位置查找的固定时间要好。

您的目标是什么?查找特定键的值?用一堆值做一些有意义的事情(比如取它们的和)?或者复制特定的值。。。?
for (Map.Entry<K, V> entry : map.entrySet()) {
     ...
 }