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.接下来看看各种为什么. 一.需求: 对比两个对 ...
随机推荐
- 算法导论-散列表(Hash Table)-大量数据快速查找算法
目录 引言 直接寻址 散列寻址 散列函数 除法散列 乘法散列 全域散列 完全散列 碰撞处理方法 链表法 开放寻址法 线性探查 二次探查 双重散列 随机散列 再散列问题 完整源码(C++) 参考资料 内 ...
- @CrossOrigin 跨域注解
在spring 4.2后,提供了跨域注解@CrossOrigin https://spring.io/guides/gs/rest-service-cors/ Enabling CORS Contro ...
- MyEclipse图表工具Birt的使用技巧(三)--连接webservice数据源
Web Services 技术是一套标准.它定义了应用程序怎样在Web上实现互操作. 用户能够使用不论什么语言.在不同的平台下编写Web Services.然后通过Web Services 的标准来对 ...
- Jenkins插件开发资料
原文地址:http://www.ciandcd.com/?p=181 Jenkins plugin 开发: Document http://hudson-ci.org/docs/index.html ...
- partial(类型)(C# 参考)
通过分部类型可以定义要拆分到多个文件中的类.结构或接口. 如下: 在 File1.cs 中: namespace PC { partial class A { ; void MethodA() { } ...
- 有关IM即时通讯原理
在网上搜索了一些资料,谈谈自己对IM即时通讯的理解 IM全称为Instant Messaging,即时通讯,如qq那种的. 现在有两个用户UserA, UserB, 俩人是一个IM通讯软件的好友,Us ...
- Visual Studio - 引入动态库
以VS2013为例: 1.新建项目 2.选择"Win32控制台应用程序",点确定 勾选“控制台应用程序”和“空项目”选项,点击完成,然后新建一个C文件,在文件头上右键: 3.粘贴准 ...
- 485. Max Consecutive Ones【easy】
485. Max Consecutive Ones[easy] Given a binary array, find the maximum number of consecutive 1s in t ...
- 获取CPU个数
PROCESSER=`grep 'processor' /proc/cpuinfo | wc -l` JOBSS=$[$PROCESSER*2]
- 如何实现uboot和linux之间的参数传递
参考http://cgxcn.blog.163.com/blog/static/132312422009101133251202/ 参考:http://blog.chinaunix.net/uid-1 ...