遍历 Map 集合的方式

遍历 Map 集合有两种方式,分别是 keySet 和 entrySet。采用这两种方式,可以遍历 key+value、key、value。

采用 keySet 遍历

  1. long startTime1 = System.currentTimeMillis();
  2. Iterator<String> iter = map.keySet().iterator();
  3. while (iter.hasNext()){
  4. key = iter.next();
  5. value = map.get(key);
  6. }
  7. long endTime1 = System.currentTimeMillis();
  8. System.out.println("第一个程序运行时间:"+(endTime1-startTime1)+"ms");
  1. long startTime2 = System.currentTimeMillis();
  2. for(String key2 : map.keySet()){
  3. value = map.get(key2);
  4. }
  5. long endTime2 = System.currentTimeMillis();
  6. System.out.println("第二个程序运行时间:"+(endTime2-startTime2)+"ms");

采用 entrySet 遍历

  1. long startTime3 = System.currentTimeMillis();
  2. Iterator<Map.Entry<String,String>> iter3 = map.entrySet().iterator();
  3. Map.Entry<String,String> entry3;
  4. while (iter3.hasNext()){
  5. entry3 = iter3.next();
  6. key = entry3.getKey();
  7. value = entry3.getValue();
  8. }
  9. long endTime3 = System.currentTimeMillis();
  10. System.out.println("第三个程序运行时间:" +(endTime3-startTime3)+"ms");
  1. long startTime4 = System.currentTimeMillis();
  2. for(Map.Entry<String,String> entry4 : map.entrySet()){
  3. key = entry4.getKey();
  4. value = entry4.getValue();
  5. }
  6. long endTime4 = System.currentTimeMillis();
  7. System.out.println("第四个程序运行时间:"+(endTime4-startTime4) +"ms");

采用 values 遍历 value

  1. long startTime5 = System.currentTimeMillis();
  2. Iterator<String> iter5 = map.values().iterator();
  3. while (iter5.hasNext()){
  4. value = iter5.next();
  5. }
  6. long endTime5 = System.currentTimeMillis();
  7. System.out.println("第五个程序运行时间:"+(endTime5-startTime5) +"ms");
  1. long startTime6 = System.currentTimeMillis();
  2. for(String value6 : map.values()){
  3. }
  4. long endTime6 = System.currentTimeMillis();
  5. System.out.println("第六个程序运行时间:"+(endTime6-startTime6) +"ms");

运行效率

1)map 的 key 采用简单形式和复杂形式时,查找的效率是不同的,简单的key值效率更高
2)当数据量大的时候,采用 entrySet 遍历 key+value 的效率要高于 keySet
3)当我们只需要取得 value 值时,采用 values 来遍历效率更高