• Map 集合遍历的4种方法


    Map 集合初始化时,指定集合初始值大小。

    说明:HashMap 使用 HashMap(int initialCapacity) 初始化。

    正例:initialCapacity = (需要存储的元素个数 / 负载因子) + 1。注意负载因子(即 loaderfactor)默认为 0.75,如果暂时无法确定初始值大小,请设置为 16(即默认值)。

    反例:HashMap 需要放置 1024 个元素,由于没有设置容量初始大小,随着元素不断增加,容量 7 次被迫扩大,resize 需要重建 hash 表,严重影响性能。
    /**
    *
    * 测试类
    */
    @org.junit.Test
    public void testHashMap() {
    Map<String, String> map = new HashMap<>(4);
    map.put("1", "a");
    map.put("2", "b");
    map.put("3", "c");
    map.put("4", "d");

    System.out.println("------------------- map.keySet()-------------------------");
    //获取所有的 key,根据 key 取出对应的value
    for (String key : map.keySet()) {
    System.out.println("key:" + key + ",value:" + map.get(key));
    }
    System.out.println("------------------获取map种所有的value:map.values()--------------------------");
    //遍历所有的value
    for (String value : map.values()) {
    System.out.println("value:" + value);
    }
    System.out.println("-------------------获取键值对:map.entrySet()-------------------------");
    //取出对应的 key,value 键值对,容量大时推荐使用
    for (Map.Entry<String, String> entry : map.entrySet()) {
    System.out.println("键值对:" + entry);
    //获取 键值对的 key
    System.out.println("key:" + entry.getKey());
    //获取 键值对的 value
    System.out.println("value:" + entry.getValue());
    }

    System.out.println("--------------------- 通过 Map.entrySet使用iterator遍历 key 和 value -----------------------");
    Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
    while (iterator.hasNext()) {
    Map.Entry<String, String> entry = iterator.next();
    System.out.println("key:" + entry.getKey() + ",value:" + entry.getValue());
    }

    System.out.println("-------------------- map.forEach JDK1.8 新特性 ----------------------");
    map.forEach((key, value) -> {
    System.out.println("key=" + key + ",value=" + value);
    });
    }

    推荐:
    使用 entrySet 遍历 Map 类集合 KV,而不是 keySet 方式进行遍历。
    说明keySet 其实是遍历了 2 次,一次是转为 Iterator 对象,另一次是从 hashMap 中取出key 所对应的 value。而 entrySet 只是遍历了一次就把 key value 都放到了 entry 中,效率更高。
    如果是 JDK8,使用 Map.foreach 方法。
    正例: values()返回的是 V 值集合,是一个 list 集合对象keySet()返回的是 K 值集合,是一个 Set 集合对象entrySet()返回的是 K-V 值组合集合



  • 相关阅读:
    【转】【SEE】基于SSE指令集的程序设计简介
    【转】【Asp.Net】asp.net服务器控件创建
    ControlTemplate in WPF ——ScrollBar
    ControlTemplate in WPF —— Menu
    ControlTemplate in WPF —— Expander
    ControlTemplate in WPF —— TreeView
    ControlTemplate in WPF —— ListBox
    ControlTemplate in WPF —— ComboBox
    ControlTemplate in WPF —— TextBox
    ControlTemplate in WPF —— RadioButton
  • 原文地址:https://www.cnblogs.com/ming-blogs/p/11001932.html
Copyright © 2020-2023  润新知