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; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗