比较Map的遍历

1. 使用enrtySet()for each遍历

      

[java]  view plain copy print ?
  1. for (Map.Entry<String,Integer> entry : testMap.entrySet()) {  
  2.     //entry.getKey();  
  3.     //entry.getValue();  
  4. }  
  5.   
  6.    
    2. 使用 keySet() for each 遍历

   

[java]  view plain copy print ?
  1. for (String key : testMap.keySet()) {  
  2.     //testMap.get(key);  
  3. }  
    3. 使用 enrtySet() 迭代遍历 

[java]  view plain copy print ?
  1. Iterator<Map.Entry<String,Integer>> itr1 = testMap.entrySet().iterator();  
  2. while(itr1.hasNext()){  
  3.     Map.Entry<String,Integer> entry = itr1.next();  
  4.     //entry.getKey();  
  5.     //entry.getValue();  
  6. }  
    4. 使用   keySet()迭代遍历

[java]  view plain copy print ?
  1. Iterator itr2 = testMap.keySet().iterator();  
  2. while(itr2.hasNext())  
  3. {  
  4.     String key = itr2.next();  
  5.     testMap.get(key);  
  6. }  

   比较4种方式的性能。使用100万条数据填充一个Map对象,后遍历这个Map,比较遍历的时间花费。

[java]  view plain copy print ?
  1. public class ComparingMapLoop {  
  2.     private static int MAP_SIZE = 1000000;  
  3.     private static Map<String, Integer> testMap = new HashMap<String, Integer>(MAP_SIZE);  
  4.   
  5.     static {  
  6.         for (int i = 0; i < MAP_SIZE; i++) {  
  7.             testMap.put("key_" + i, i);  
  8.         }  
  9.     }  
  10.   
  11.     public void testMapLoop() {  
  12.         long startTime = Calendar.getInstance().getTimeInMillis();  
  13.         //First way using entrySet in for-each loop  
  14.         for (Map.Entry<String, Integer> entry : testMap.entrySet()) {  
  15.             entry.getKey();  
  16.             entry.getValue();  
  17.         }  
  18.   
  19.         System.out.println("Using entrySet() in for-each loop : " + (Calendar.getInstance().getTimeInMillis() - startTime));  
  20.   
  21.         startTime = Calendar.getInstance().getTimeInMillis();  
  22.         //Second way using keySet() in for-each loop  
  23.         for (String key : testMap.keySet()) {  
  24.             testMap.get(key);  
  25.         }  
  26.   
  27.         System.out.println("Using keySet() in for-each loop : " + (Calendar.getInstance().getTimeInMillis() - startTime));  
  28.   
  29.         startTime = Calendar.getInstance().getTimeInMillis();  
  30.         //Third way using Iterator on entrySet() in while loop  
  31.         Iterator<Map.Entry<String, Integer>> itr1 = testMap.entrySet().iterator();  
  32.         while (itr1.hasNext()) {  
  33.             Map.Entry<String, Integer> entry = itr1.next();  
  34.             entry.getKey();  
  35.             entry.getValue();  
  36.         }  
  37.   
  38.         System.out.println("Using entrySet() and iterator : " + (Calendar.getInstance().getTimeInMillis() - startTime));  
  39.   
  40.         startTime = Calendar.getInstance().getTimeInMillis();  
  41.         //Third way using Iterator on keySet() in while loop  
  42.         Iterator<String> itr2 = testMap.keySet().iterator();  
  43.         while (itr2.hasNext()) {  
  44.             String key = itr2.next();  
  45.             testMap.get(key);  
  46.         }  
  47.   
  48.         System.out.println("Using keySet() and iterator : " + (Calendar.getInstance().getTimeInMillis() - startTime));  
  49.     }  
  50.   
  51.     public static void main(String[] args) {  
  52.         new ComparingMapLoop().testMapLoop();  
  53.     }  
  54. }  

   运行结果:

Using entrySet() in for-each loop : 62
Using keySet() in for-each loop : 89
Using entrySet() and iterator : 58
Using keySet() and iterator : 81


     使用entry set 产生的性能相对于key set 迭代来说更强大。当然,其根本原因是使用迭代的方式不同, key set 会两次去执行Map检索查找对已的key-value键值对。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值