• Java HashMap 遍历方式探讨


    JDK8之前,可以使用keySet或者entrySet来遍历HashMap,JDK8中引入了map.foreach来进行遍历。
    
    keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从hashMap中取出key所对应的value。而entrySet只是遍历了一次就把key和value都放到了entry中,效率更高。如果是JDK8,使用Map.foreach方法。
    
    1. keySet和entrySet
    
    1.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);
    }
    
    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);
    }
    2. Map.foreach
    
    在JDK8以后,引入了Map.foreach。
    
    Map.foreach本质仍然是entrySet
    
    default void forEach(BiConsumer<? super K, ? super V> action) {
            Objects.requireNonNull(action);
            for (Map.Entry<K, V> entry : entrySet()) {
                K k;
                V v;
                try {
                    k = entry.getKey();
                    v = entry.getValue();
                } catch(IllegalStateException ise) {
                    // this usually means the entry is no longer in the map.
                    throw new ConcurrentModificationException(ise);
                }
                action.accept(k, v);
            }
        }
    
    配合lambda表达式一起使用,操作起来更加方便。
    
    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");
        }
    });
    

      

  • 相关阅读:
    caffe2安装教程
    如何将360极速浏览器的网页背景颜色设置为护眼色
    3ds max启动慢怎么办?
    3dContactPointAnnotationTool开发日志(十八)
    3dContactPointAnnotationTool开发日志(十七)
    3dContactPointAnnotationTool开发日志(十六)
    3dContactPointAnnotationTool开发日志(十四)
    3dContactPointAnnotationTool开发日志(十三)
    js上传图片及预览功能
    photoSlider-原生js移动开发轮播图、相册滑动插件
  • 原文地址:https://www.cnblogs.com/ipetergo/p/7421163.html
Copyright © 2020-2023  润新知