最近研究Lucene的时候,遇到的用到大量Map的问题,心生好奇,想看一下在1W,10W,100W三种数据量下,new HashMap ,与 HashMap.clear()方法的效率问题。

提前说明:就是自己好奇测着玩的,不能作为任何依据,只是提供一个参考。

JDK版本:1.8

IDE:idea

Clear()

数据量级:1W ,执行次数:10次,取10次时间的平均值

执行结果:

map-clear:27
map-clear:27
map-clear:15
map-clear:14
map-clear:15
map-clear:13
map-clear:11
map-clear:3
map-clear:4
map-clear:4
平均时间:13

执行内存快照:

数据量级:10W ,执行次数:10次,取10次时间的平均值

执行结果:

map-clear:212
map-clear:128
map-clear:99
map-clear:161
map-clear:49
map-clear:58
map-clear:44
map-clear:112
map-clear:218
map-clear:40
平均时间:112

执行内存快照:

数据量级:100W ,执行次数:10次,取10次时间的平均值

执行结果:

map-clear:661
map-clear:657
map-clear:364
map-clear:426
map-clear:343
map-clear:481
map-clear:271
map-clear:212
map-clear:176
map-clear:165
平均时间:375

执行内存快照:

new HashMap()

数据量级:1W ,执行次数:10次,取10次时间的平均值

执行结果:

map-new:27
map-new:20
map-new:10
map-new:13
map-new:19
map-new:21
map-new:9
map-new:7
map-new:7
map-new:6
平均时间:13

执行内存快照:

数据量级:10W ,执行次数:10次,取10次时间的平均值

执行结果:

map-new:122
map-new:58
map-new:66
map-new:110
map-new:83
map-new:45
map-new:62
map-new:36
map-new:29
map-new:30
平均时间:64

执行内存快照:

数据量级:100W ,执行次数:10次,取10次时间的平均值

执行结果:

map-new:539
map-new:493
map-new:420
map-new:294
map-new:455
map-new:305
map-new:379
map-new:256
map-new:314
map-new:315
平均时间:377

执行内存快照:

测试类:

public class MapTest {

    public static void main(String[] args) throws InterruptedException {

        long totalTimes = 0L;
for (int i = 0 ; i < 10 ; i++){
totalTimes += mapToNew(1000000L);
}
System.out.println("平均时间:" + (totalTimes / 10));
Thread.sleep(100000L);
} /**
* new map
* @param size
* @return
*/
public static long mapToNew(long size) {
long nowTime = new Date().getTime();
Map<String,Object> map;
for (int i = 0 ; i < size ; i++){
map = new HashMap<>();
map.put("id",i);
map.put("name","测试文章");
map.put("realname","测试文章11111");
map.put("text","测试文章+++++++++++++++++++");
map.put("long",4324L);
map.put("double",4354D);
map.put("text2","测试文章+++++++++++++++++++");
map.put("text3","测试文章+++++++++++++++++++");
map.put("text4","测试文章+++++++++++++++++++");
map.put("text5","测试文章+++++++++++++++++++");
map.put("text6","测试文章+++++++++++++++++++");
map.put("text7","测试文章+++++++++++++++++++");
}
long timeSize = new Date().getTime() - nowTime;
System.out.println("map-new:" + timeSize);
return timeSize;
} /**
* clear map
* @param size
* @return
*/
public static long mapToClear(long size) {
long nowTime = new Date().getTime();
Map<String,Object> map = new HashMap<>();
for (int i = 0 ; i < size ; i++){
map.clear();
map.put("id",i);
map.put("name","测试文章");
map.put("realname","测试文章11111");
map.put("text","测试文章+++++++++++++++++++");
map.put("long",4324L);
map.put("double",4354D);
map.put("text2","测试文章+++++++++++++++++++");
map.put("text3","测试文章+++++++++++++++++++");
map.put("text4","测试文章+++++++++++++++++++");
map.put("text5","测试文章+++++++++++++++++++");
map.put("text6","测试文章+++++++++++++++++++");
map.put("text7","测试文章+++++++++++++++++++");
}
long timeSize = new Date().getTime() - nowTime;
System.out.println("map-clear:" + timeSize);
return timeSize;
} }

HashMap的clear()方法和new HashMap的效率问题的更多相关文章

  1. Session的clear方法和flush方法

    Session Clear()与 Flush() 解释 1.Clear 方法  无论是Load 还是 Get 都会首先查找缓存(一级缓存) 如果没有,才会去数据库查找,调用Clear() 方法,可以强 ...

  2. Hibernate中evict方法和clear方法说明

    Hibernate中evict方法和clear方法说明 先创建一个对象,然后调用session.save方法,然后调用evict方法把该对象清除出缓存,最后提交事务.结果报错: Exception i ...

  3. HashMap的clear方法

    我们都知道HashMap的clear()方法会清楚map的映射关系,至于怎么实现的呢? 下面先看一下clear()方法的源码 public void clear() { Node<K,V> ...

  4. 集合hashCode()方法和equals()办法

    1.哈希码:         Object中的HashCode方法会返回该对象的的内存真实地址的整数化表示,这个形象的不是真正抵制的整数值就是哈希码. 2.利用哈希码向集合中插入数据的顺序?     ...

  5. 详解equals()方法和hashCode()方法

    前言 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码.equals()和hashCode()都不是final方 ...

  6. java中equals方法和hashcode方法的区别和联系,以及为什么要重写这两个方法,不重写会怎样

    一.在Object类中的定义为:public native int hashCode();是一个本地方法,返回的对象的地址值.但是,同样的思路,在String等封装类中对此方法进行了重写.方法调用得到 ...

  7. Java基础系列-equals方法和hashCode方法

    原创文章,转载请标注出处:<Java基础系列-equals方法和hashCode方法> 概述         equals方法和hashCode方法都是有Object类定义的. publi ...

  8. hashCode()方法和equal()方法的区别

    本文参考地址:http://www.cnblogs.com/zgq0/p/9000801.html hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等 ...

  9. Java 如何重写对象的 equals 方法和 hashCode 方法

    前言:Java 对象如果要比较是否相等,则需要重写 equals 方法,同时重写 hashCode 方法,而且 hashCode 方法里面使用质数 31.接下来看看各种为什么. 一.需求: 对比两个对 ...

随机推荐

  1. 算法导论-散列表(Hash Table)-大量数据快速查找算法

    目录 引言 直接寻址 散列寻址 散列函数 除法散列 乘法散列 全域散列 完全散列 碰撞处理方法 链表法 开放寻址法 线性探查 二次探查 双重散列 随机散列 再散列问题 完整源码(C++) 参考资料 内 ...

  2. @CrossOrigin 跨域注解

    在spring 4.2后,提供了跨域注解@CrossOrigin https://spring.io/guides/gs/rest-service-cors/ Enabling CORS Contro ...

  3. MyEclipse图表工具Birt的使用技巧(三)--连接webservice数据源

    Web Services 技术是一套标准.它定义了应用程序怎样在Web上实现互操作. 用户能够使用不论什么语言.在不同的平台下编写Web Services.然后通过Web Services 的标准来对 ...

  4. Jenkins插件开发资料

    原文地址:http://www.ciandcd.com/?p=181 Jenkins plugin 开发: Document http://hudson-ci.org/docs/index.html ...

  5. partial(类型)(C# 参考)

    通过分部类型可以定义要拆分到多个文件中的类.结构或接口. 如下: 在 File1.cs 中: namespace PC { partial class A { ; void MethodA() { } ...

  6. 有关IM即时通讯原理

    在网上搜索了一些资料,谈谈自己对IM即时通讯的理解 IM全称为Instant Messaging,即时通讯,如qq那种的. 现在有两个用户UserA, UserB, 俩人是一个IM通讯软件的好友,Us ...

  7. Visual Studio - 引入动态库

    以VS2013为例: 1.新建项目 2.选择"Win32控制台应用程序",点确定 勾选“控制台应用程序”和“空项目”选项,点击完成,然后新建一个C文件,在文件头上右键: 3.粘贴准 ...

  8. 485. Max Consecutive Ones【easy】

    485. Max Consecutive Ones[easy] Given a binary array, find the maximum number of consecutive 1s in t ...

  9. 获取CPU个数

    PROCESSER=`grep 'processor' /proc/cpuinfo | wc -l` JOBSS=$[$PROCESSER*2]

  10. 如何实现uboot和linux之间的参数传递

    参考http://cgxcn.blog.163.com/blog/static/132312422009101133251202/ 参考:http://blog.chinaunix.net/uid-1 ...