码迷,mamicode.com
首页 > 其他好文 > 详细

map遍历测试结果

时间:2014-12-31 12:40:22      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

结论:一般情况下推荐使用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

 

map遍历测试结果

标签:

原文地址:http://www.cnblogs.com/zhuawang/p/4195290.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!