软件构造Lab5-使用Map键值对改进程序的运行速度的性能

博客讲述Lab5中用不同I/O策略读取近90w行、约30M的大文件,原程序因用循环遍历比对数据,时间复杂度达O(n^2),读取耗时近3小时。后借用Java的Map接口,将循环比对转为键值对查询,使读文件时间从3小时降至20分钟左右,提升了程序性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

具体代码在:这里(求打星!!)
Lab5中的3.2中要求我们用不同的I/O策略读取大文件,并且记录读取大文件所花费的时间。这里的“大文件”,以SocialNetworkCircle_Most.txt为例,其中有近90w行数据,大小近30M。
在这里插入图片描述
在这里插入图片描述在仅仅修改了I/O的情况下,利用Lab4原有的代码读取此文件,本人足足花费了近3个小时!!!说明原程序的时间性能实在是太差!因此分析原程序代码寻找找出程序性能瓶颈的代码。
最终经本人寻找,是此处代码:
在这里插入图片描述为了保证SocialTie中的人在Friend或CentralUser中出现过,每次添加相应关系前都需要判断该人是否在Friend中出现过,原代码是通过一个循环遍历所有已添加的Friend进行比对。
每一次添加一个关系,都要遍历一遍已有数据(O(n)),最后导致时间复杂度为O(n^2),这种方法在数据量较小时没有关系,但在近90w行的数据中,所花费的时间是极其恐怖的。
那么,有没有什么更高效的比对方法,来减少这一步所花费的时间,从而降低程序读文件的总体时间呢?
这就让我联想到了键值对查询的方法,键值对查询方法的速率要远远优于循环遍历查询。因此,借用java中的Map接口,我改进了原代码,将循环比对转成了键值对查询在这里插入图片描述在这里插入图片描述经过此番改进后,程序性能大大提升,读文件所花费的时间由原来的3h降低到了20min左右。

总结:
在今后需要进行查询比对的程序中,可以使用Map接口代替列表遍历查询,能大大提高程序的性能!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值