最近研究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. Android Handler,Loop,HandlerThread消息处理

    博客标题也不知道写什么好,仅仅是近期有时候发现Handler,Loop,HandlerThread非常easy混淆,所以做了简单的笔记处理: 第一种 : 大概的意思给出说明图: watermark/2 ...

  2. shell中单引号、双引号、反引号的区别

    '单引号' 忽略所有特殊字符 "双引号" 忽略大部分特殊字符,除了$  ` `反引号` 输出执行结果

  3. TreeView 拖拽 增删改

    using Endv.Tools; using System; using System.Data; using System.Drawing; using System.IO; using Syst ...

  4. Mac机装Win7后 启动只见鼠标怎么办

    我有一台Mac机,用Bootcamp的方式装了Win7,昨天一按开机键发现只有鼠标没有别的. 当时按热启动无效,把笔记本盖子合上一会再开也无效,按关机键关掉再开也无效(这时是短按). 当时想是不是Ma ...

  5. node.js开发平台

    1.EDP:基于Node.JS与NPM的企业级开发平台 什么是EDP? EDP是一个基于Node.JS与NPM的企业级前端应用的开发平台.主要通过命令行的方式使用.EDP提供了前端应用开发时经常使用的 ...

  6. select * from (select user())a 为什么是查询user()的意思?

    步骤:1.先查询 select user() 这里面的语句,将这里面查询出来的数据作为一个结果集 取名为 a2.然后 再 select * from a 查询a ,将 结果集a 全部查询出来

  7. Intellij IDEA + Tomcat 出现 HTTP status 404错误的解决办法

    最近要做POC,接了个老项目改,使用war exploded部署到本机的Tomcat(8.5版) 通过Intellij IDEA启动Tomcat的时候发现系统的登录页面出现HTTP-status-40 ...

  8. android adt 最新下载地址23.03

    打开这个网址就可以看到adt的详细信息:  http://developer.android.com/sdk/installing/installing-adt.html 或者直接在你的eclipse ...

  9. Java 创建用户异常类、将异常一直向上抛、 throw和throws的区别

    如果java提供的系统异常类型不能满足程序设计的需求,那么可以设计自己的异常类型. 从java异常类的结构层次可以看出,java类型的公共父类为Throwable.在程序运行中可能出现俩种问题:一种是 ...

  10. 为 jquery validate 添加验证失败回调

    转载自:https://blog.csdn.net/huang100qi/article/details/52619227 1. jquery Validation Plugin - v1.15.1 ...