2016-08-18 91 views
5

我需要迭代通过一个有5000个项目的哈希映射,但在第500个项目迭代后,我需要做一个睡眠,然后继续下一个500项目。这里是从here盗取的例子。任何帮助将不胜感激。迭代通过哈希映射'块'

import java.util.HashMap; 
import java.util.Map; 

public class HashMapExample { 

    public static void main(String[] args) { 
     Map vehicles = new HashMap(); 

     // Add some vehicles. 
     vehicles.put("BMW", 5); 
     vehicles.put("Mercedes", 3); 
     vehicles.put("Audi", 4); 
     vehicles.put("Ford", 10); 
     // add total of 5000 vehicles 

     System.out.println("Total vehicles: " + vehicles.size()); 

     // Iterate over all vehicles, using the keySet method. 
     // here are would like to do a sleep iterating through 500 keys 
     for(String key: vehicles.keySet()) 
      System.out.println(key + " - " + vehicles.get(key)); 
     System.out.println(); 

     String searchKey = "Audi"; 
     if(vehicles.containsKey(searchKey)) 
      System.out.println("Found total " + vehicles.get(searchKey) + " " 
        + searchKey + " cars!\n"); 

     // Clear all values. 
     vehicles.clear(); 

     // Equals to zero. 
     System.out.println("After clear operation, size: " + vehicles.size()); 
    } 
} 
+0

这个问题比以前要干净得多。 +1 – byxor

+0

@BrandonIbbotson谢谢我正要删除旧的,但有人发了一个答案,我无法删除它了。 – PHA

+0

@PHA你总是可以鼓励回答者在这里重新发布他的答案,以允许你删除这个问题。 –

回答

12

只要有一个计数器变量保持迭代次数的跟踪迄今:

int cnt = 0; 
for(String key: vehicles.keySet()) { 
    System.out.println(key + " - " + vehicles.get(key)); 

    if (++cnt % 500 == 0) { 
    Thread.sleep(sleepTime); // throws InterruptedException; needs to be handled. 
    } 
} 

需要注意的是,如果你想同时在循环键和值,最好是迭代地图的entrySet()

for(Map.Entry<String, Integer> entry: vehicles.entrySet()) { 
    String key = entry.getKey(); 
    Integer value = entry.getValue(); 
    // ... 
} 

另外:不要使用原始类型:

Map<String, Integer> vehicles = new HashMap<>();