迭代一个hashmap:'For'循环使用Random Access OR Iterator?

时间:2011-03-10 22:53:02

标签: java hashtable hashmap

我需要遍历Hashmap以检索存储在其中的值。

作为奖励,我还有一个键列表。所以我可以选择使用迭代器或for循环中的随机Access迭代它。这两个选项中的哪一个可以提供更好的执行方式?

4 个答案:

答案 0 :(得分:3)

没有什么真正的区别,但如果您通过调用map.keySet()获取密钥列表,那么最简单的方法是迭代entrySet()

for (Map.Entry<K, V> entry : map.entrySet()) {
     ...
 }

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

直观地说,我会说使用迭代器,因为它可能不需要任何查找,只是给你直接的O(n)性能。请注意,您的最佳案例性能将是O(n),因为您触摸了集合中的每个元素,并且您的平均案例性能将是访问方法的大O的O(n)倍。由于Hash查找具有O(1)的高概率,您很可能仍然是O(n),但是使用迭代器,因为您只是计算下一个位置,所以(我认为)保证O(1)访问为下一个元素。这就是我选择迭代器的原因。另外,下一个元素计算的常数时间可能比通过哈希进行位置查找的常量时间更好。

答案 3 :(得分:0)

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