Java HashMap 遍历方式性能探讨

JDK8之前,可以使用keySet或者entrySet来遍历HashMap,JDK8中引入了map.foreach来进行遍历


HashMap四种遍历查询方式耗时性能对比


Map<String, String> map = new HashMap<String, String>();
        int num = 5000000;
        String key, value;
        // 存放500万条数据
        for (int i = 1; i <= num; i++) {
            key = "" + i;
            value = "value";
            map.put(key, value);

     }


1.keySet:

    Map map=new HashMap();

    Iterator it=map.keySet().iterator();

    Object key;

    Object value;

    while(it.hasNext()){

    key=it.next();

    value=map.get(key);

    System.out.println(key+":"+value);

    }


时间:只获取key  50;获取key和value 170

2:entrySet:


    Map map=new HashMap();

    Iterator it=map.entrySet().iterator();

    Object key;

    Object value;

    while(it.hasNext()){

    Map.Entry entry = (Map.Entry)it.next();

    key=entry.getKey();

    value=entry.getValue();

    System.out.println(key+"="+value);

    }

时间:只获取key或获取value 时间差不多 110-140;获取key和value  140


3:      

for (String key1 : map.keySet()) {
            value = map.get(key1);
}

时间:170   



4:

for (Entry<String, String> entry1 : map.entrySet()) {
		key = entry1.getKey();
		value = entry1.getValue();
	}

时间:130


比较:keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从hashMap中取出key所对应的value。而entrySet只是遍历了一次就把key和value都放到了entry中,效率更高。如果是JDK8,使用Map.foreach方法。



2.1 使用Java8的foreach+lambda表达式遍历Map


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

    items.put("A", 10);

    items.put("B", 20);

    items.put("C", 30);

    items.put("D", 40);

    items.put("E", 50);

    items.put("F", 60);

     

    items.forEach((k,v)->System.out.println("Item : " + k + " Count : " + v));

     

    items.forEach((k,v)->{

        System.out.println("Item : " + k + " Count : " + v);

        if("E".equals(k)){

            System.out.println("Hello E");

        }

    });

时间:158


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KunQian_smile

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值