zoukankan      html  css  js  c++  java
  • map遍历测试结果

    结论:一般情况下推荐使用enterSet的for循环(即以下的方法2),如果只是取key值可以使用keySet性能会更好。

            因为keySet只取key,enterSet即取了key又取了value。

    public static void main(String[] args) throws Exception {
            ConcurrentHashMap<Long, ReqPacket> r = new ConcurrentHashMap<Long, ReqPacket>();
            long size = 2000000;
            // 方法1
            for (long i = 0; i < size; i++) {
                r.put(i, new ReqPacket());
            }
            System.out.println("方法1开始执行数:" + r.size());
            long t1 = System.currentTimeMillis();
            Iterator<Entry<Long, ReqPacket>> iter2 = r.entrySet().iterator();
            while (iter2.hasNext()) {
    
                // ReqPacket value=iter2.next().getValue();
                r.remove(iter2.next().getKey());
            }
            System.out.println("方法1 entrySet hasNext 执行时间:" + (System.currentTimeMillis() - t1) + " 结束数量:" + r.size());
    
            // 方法2
    //推荐方法 for (long i = 0; i < size; i++) { r.put(i, new ReqPacket()); } System.out.println("方法2开始执行数:" + r.size()); long t2 = System.currentTimeMillis(); for (Entry<Long, ReqPacket> entry2 : r.entrySet()) { ReqPacket value = entry2.getValue(); r.remove(entry2.getKey()); } System.out.println("方法2 entrySet for 执行时间:" + (System.currentTimeMillis() - t2) + " 结束数量:" + r.size()); // 方法3 for (long i = 0; i < size; i++) { r.put(i, new ReqPacket()); } System.out.println("方法3开始执行数:" + r.size()); long t3 = System.currentTimeMillis(); for (Long key : r.keySet()) { ReqPacket value = r.get(key); r.remove(key); } System.out.println("方法3 keySet for 执行时间:" + (System.currentTimeMillis() - t3) + " 结束数量:" + r.size()); // 方法4 for (long i = 0; i < size; i++) { r.put(i, new ReqPacket()); } System.out.println("方法4开始执行数:" + r.size()); long t4 = System.currentTimeMillis(); Iterator<Long> iter = r.keySet().iterator(); while (iter.hasNext()) { // ReqPacket value = r.get(iter.next()); r.remove(iter.next()); } System.out.println("方法4 keySet hasNext 执行时间:" + (System.currentTimeMillis() - t4) + " 结束数量:" + r.size()); }

    测试结果:

    方法1开始执行数:2000000
    方法1 entrySet hasNext 执行时间:194 结束数量:0
    方法2开始执行数:2000000
    方法2 entrySet for 执行时间:175 结束数量:0
    方法3开始执行数:2000000
    方法3 keySet for 执行时间:230 结束数量:0
    方法4开始执行数:2000000
    方法4 keySet hasNext 执行时间:104 结束数量:0
  • 相关阅读:
    Ilya Muromets(DP or 思维)
    2018 焦作网络赛 L Poor God Water ( AC自动机构造矩阵、BM求线性递推、手动构造矩阵、矩阵快速幂 )
    上下界的网络流模板
    计蒜客 2018南京网络赛 I Skr ( 回文树 )
    回文树 / 自动机模板
    Nowcoder 练习赛26 D xor序列 ( 线性基 )
    线性基模板
    Tarjan求强连通分量、求桥和割点模板
    Nowcoder 挑战赛23 B 游戏 ( NIM博弈、SG函数打表 )
    第二类斯特林数模板
  • 原文地址:https://www.cnblogs.com/zhuawang/p/4195290.html
Copyright © 2011-2022 走看看