(软件构造)lab5遇到的问题以及相应的解决

首先表达一下我最初的看法:刚做这个实验我特别难受,尤其是第一步,需要更改我以往的“编程习惯”。就比如说Google和Oracle对每一行代码开头缩进的要求:我从大一编程到该实验之前,都是使用4个空格缩进,而Google规范要求2个空格缩进,Oracle规范要求8个缩进
在这里插入图片描述
我以为自己会很不适应,但是改完了代码规范之后发现,2个空格也没什么,即使对于“强迫症”的人来说也不是啥大事儿,马上就能习惯新的编程风格了。而且,考虑到今后工作的时候,每个地方要求的代码规范可能都不同,团体不可能去适应你一个人,所以我要提前做好随时更改自己变成规范的准备,就渐渐接受了。

一、代码规范

关于Google编程规范的描述,我完全参考的下面这篇文章,我认为写得非常好:
https://www.cnblogs.com/LeoBoy/p/6006540.html

二、读写文件

注:我第一次写文件的时候,是建立了一个String str对象。每读一行,就让str += line,然后把最终的str写入新的文件中。总共几十万行信息的文件,这种方式根本实现不了(我运行了40多分钟也没出结果,果断放弃了):因为String是不可变类型,一旦对String进行+=操作,那么str += line就会被当做一个新的String对象被创建出来,当前的str就会变成这个新的String对象的引用,而不是在不改变引用的基础上修改str中的值。
所以str += line的速度非常非常慢,可以在控制台输出一下子试试(每循环一次输入计数器count + 1并输出count的值)。

如果想用String来存储读入的文件内容,可以使用StringBuilder类的对象来存储,因为StringBuilder是可变类型,速度会比String快很多,快出几个数量级!

三、更改数据结构

如果选用的数据结构简单,时间性能很好,很可能导致空间性能很差!比如我的SocialNetworkCircle类中,我用一个10万*10万的二维数组来存储两个人之间的亲密度:
double intimacy[][] = new double[100000][100000];
运行时会抛出异常:Java Heap Size异常:Java.Lang.OutOfMemoryError。然后我直接的解决办法是,更改JVM参数,让堆能够使用的内存空间扩大为最大,但是仍然抛出该异常。然后我计算了以下这个intimacy数据结构占用的空间的内存大小:8 * 100’000 * 100’000:800亿个字节!不溢出才怪呢。

也就是说,10万个用户之间最多可以有100亿个亲密度。
首先,由于亲密度是无向的,所以该intimacy二维数组有一半的空间会浪费掉;
其次,该实验给的样例文件,亲密度只有80万左右。课件该数据结构浪费了太多的空间。

所以我把该doubla[][]改成了HashMap,用Map来存储亲密度,存储的就全都是有用的信息了。

该实验中其余的内容几乎都是对工具的使用,不再赘述。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值