Map遍历方法及效率

在大学的时候记得学过通过迭代器进行Map的遍历,但是从参加工作后,基本都是通过for循环遍历,没用过迭代器,于是去了解了Map的几种遍历方法并通过运行测试各自的速度。

注意:这里只讲通过遍历同时能过获取key和value的遍历,所以不记录values()方法的遍历

遍历方法为两种:

  1. Iterator迭代器遍历
  2. for循环遍历

但是从细节上,迭代器遍历还分为:

  • KeySet遍历
  • EntrySet遍历

一、Iterator迭代器遍历

KeySet遍历

  1. 通过keySet()方法获取map的键集合
  2. 获取键集合的迭代器
  3. 遍历键集合
  4. 通过键获取map中对应的值
Set keyset = map.keySet();
Iterator iterator = keyset.iterator();
while(iterator.hasNext()){
     String key = (String) iterator.next();
     String value = targetMap.get(key);
 }

EntrySet遍历

  1. 通过entrySet()将map中的每一个键值对作为一个Map.Entry实例化后的set集合
  2. 获取Set集合的迭代器
  3. 遍历Set集合
  4. 通过Map.Entry的getKey()和getValue()方法获得键值
Set entrySet =map.entrySet();
iterator = entrySet.iterator();
while(iterator.hasNext()){
    Map.Entry entry = (Map.Entry) iterator.next();
    String key = (String) entry.getKey();
    String value = (String) entry.getValue();
}

二、for循环

JDK1.8提供了forEach方法遍历

Map.forEach((key,value)->{
   System.out.println("key:"+key+",value"+value);
});

三、测试性能

运行一下代码,测试对应遍历所需时间

Map<String,String> targetMap = new HashMap<String,String>(){
    {
       put("1","!");
       put("S","F");
       put("as","g");
       put("&","b");
       put("s","d");
       put("2","!");
       put("3S","F");
       put("4","g");
       put("5","b");
       put("6","d");
       put("7","!");
       put("8","F");
       put("9","g");
       put("10","b");
       put("11","d");
    }
};
long start = 0;
long end = 0;
System.out.println("for 循环模式 开始");
start = System.currentTimeMillis();
targetMap.forEach((key,value)->{
//            System.out.println("key:"+key+",value"+value);
});
end = System.currentTimeMillis();
System.out.println(String.format("for 循环模式 结束 用时:%d ms",end-start));

System.out.println("keySet 循环模式 开始");
start = System.currentTimeMillis();
Set keyset = targetMap.keySet();
Iterator iterator = keyset.iterator();
while(iterator.hasNext()){
    String key = (String) iterator.next();
    String value = targetMap.get(key);
//            System.out.println("key:"+key+",value"+value);
}
end = System.currentTimeMillis();
System.out.println(String.format("keySet 循环模式 结束 用时:%d ms",end-start));

System.out.println("EntrySet 循环模式 开始");
start = System.currentTimeMillis();
Set entrySet =targetMap.entrySet();
iterator = entrySet.iterator();
while(iterator.hasNext()){
    Map.Entry entry = (Map.Entry) iterator.next();
    String key = (String) entry.getKey();
    String value = (String) entry.getValue();
//            System.out.println("key:"+key+",value"+value);
}
end = System.currentTimeMillis();
System.out.println(String.format("EntrySet 循环模式 结束 用时:%d ms",end-start));

运行结果如下:
在这里插入图片描述

四、总结

速度比较

Iterator遍历>foreach
entrySet遍历>keySet遍历

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值