HashMap的clear()方法和new HashMap的效率问题
最近研究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的效率问题的更多相关文章
- Session的clear方法和flush方法
Session Clear()与 Flush() 解释 1.Clear 方法 无论是Load 还是 Get 都会首先查找缓存(一级缓存) 如果没有,才会去数据库查找,调用Clear() 方法,可以强 ...
- Hibernate中evict方法和clear方法说明
Hibernate中evict方法和clear方法说明 先创建一个对象,然后调用session.save方法,然后调用evict方法把该对象清除出缓存,最后提交事务.结果报错: Exception i ...
- HashMap的clear方法
我们都知道HashMap的clear()方法会清楚map的映射关系,至于怎么实现的呢? 下面先看一下clear()方法的源码 public void clear() { Node<K,V> ...
- 集合hashCode()方法和equals()办法
1.哈希码: Object中的HashCode方法会返回该对象的的内存真实地址的整数化表示,这个形象的不是真正抵制的整数值就是哈希码. 2.利用哈希码向集合中插入数据的顺序? ...
- 详解equals()方法和hashCode()方法
前言 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码.equals()和hashCode()都不是final方 ...
- java中equals方法和hashcode方法的区别和联系,以及为什么要重写这两个方法,不重写会怎样
一.在Object类中的定义为:public native int hashCode();是一个本地方法,返回的对象的地址值.但是,同样的思路,在String等封装类中对此方法进行了重写.方法调用得到 ...
- Java基础系列-equals方法和hashCode方法
原创文章,转载请标注出处:<Java基础系列-equals方法和hashCode方法> 概述 equals方法和hashCode方法都是有Object类定义的. publi ...
- hashCode()方法和equal()方法的区别
本文参考地址:http://www.cnblogs.com/zgq0/p/9000801.html hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等 ...
- Java 如何重写对象的 equals 方法和 hashCode 方法
前言:Java 对象如果要比较是否相等,则需要重写 equals 方法,同时重写 hashCode 方法,而且 hashCode 方法里面使用质数 31.接下来看看各种为什么. 一.需求: 对比两个对 ...
随机推荐
- jsp 页面图片为圆形
直接设置img标签的style属性即可 <img alt="" src="链接地址" style="width: 80px;height: 80 ...
- DevExpress 15.1.sln
Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio VisualStudioVersion = 14 ...
- java 入门-helloWorld
Java 教程 Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言. Java可运行于多个平台,如Windows, Mac OS,及其他多种UNIX版本的系统. ...
- Unity3D教程宝典之Web服务器篇:(第三讲)PHP的Hello World
转载自风宇冲Unity3D教程学院 引言:PHP是比较简单的编程语言,即使没接触过的也可以现学现用.PHP教程文档PHP100视频教程 Unity接 ...
- @Autowired与@Resource的使用方法和差别
一.@Autowired: 1.Spring 2.5 引入了 @Autowired 凝视,它能够对类成员变量.方法及构造函数进行标注,完毕自己主动装配的工作. 通过 @Autowired的使用来消除 ...
- win10系统怎样手动安装cab更新补丁
win10系统怎样手动安装cab更新补丁 1. 把所有补丁放进一个文件夹 例如 C:\UPDATE2. 以管理员运行命令提示符 3. 输入以下命令後按 Enterdism /online /add-p ...
- C++中的INL(转)
inl 文件是内联函数的源文件. 内联函数通常在c++头文件中实现,但有的时候内联函数较多或者出于一些别的考虑(使头文件看起来更简洁等), 往往会将这部分具体定义的代码添加到INL文件中,然后在该头文 ...
- 窥探try ... catch与__try ... __except的区别
VC中的这两个东西肯定谁都用过, 不过它们之间有什么区别, 正好有时间研究了一下, 如果有错误欢迎拍砖.基于VC2005, 32位XP 平台测试通过. 估计对于其他版本的VC和操作系统是不通用的. 1 ...
- 在训练CNN时,loss稳定在log(类别数)
参见知乎问题! https://www.zhihu.com/question/275774218 很多框架都会有一个问题,当卷积 weight NaN 之后,卷积的 output 会变成 NaN.然后 ...
- jquery treegrid实例
前台jqurey代码 function organDatagrid(){ $organ_treegrid = $('#organ_treegrid').treegrid({ url:ctx+'/pet ...