簡體   English   中英

迭代一個hashmap:'For'循環使用Random Access OR Iterator?

[英]Iterating over a hashmap: 'For' loop using Random Access OR Iterator?

我需要迭代Hashmap來檢索存儲在其中的值。

作為獎勵,我還有一個鍵列表。 所以我可以選擇使用迭代器或for循環中的隨機Access迭代它。 這兩個選項中的哪一個可以提供更好的執行方式?

沒有什么區別,但是如果你通過調用map.keySet()來獲取鍵列表,那么最簡單的方法就是遍歷entrySet()

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

這樣,您可以避免必須構建一組鍵, 然后查找每個鍵的值。

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

直覺上我會說使用迭代器,因為它可能不需要任何查找,只是給你直接的O(n)性能。 請注意,您的最佳案例性能將是O(n),因為您觸摸了集合中的每個元素,並且您的平均案例性能將是訪問方法的大O的O(n)倍。 由於Hash查找具有O(1)的高概率,您很可能仍然是O(n),但是使用迭代器,因為您只是計算下一個位置,所以(我認為)保證O(1)訪問為下一個元素。 這就是我選擇迭代器的原因。 另外,下一個元素計算的常數時間可能比通過散列進行位置查找的常量時間更好。

如果您只需要這些值並且您不需要知道鍵和值之間的關系,那么迭代器將更快,因為您節省了計算鍵的has值的時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM