题目: 有一个100G大小的文件里存的全是数字,并且每个数字见用逗号隔开。现在在这一大堆数字中找出100个最大的数出来。
谈点自己的看法吧.
1. 大文件读取, 涉及缓冲区的问题.
2. 数字用逗号隔开
3. 找出最大值的数
我目前看到的问题点就在这三点, 一点一点来看
1. 大文件读取的缓冲区问题.
看到原帖中17楼回复中使用了缓冲区读取的方式, 但是, 在当前条件下这样使用缓冲区是有问题的, 我们不能保证每次读取到缓冲区的是一个完整的数值. 假设, 里面有一段是... , 173786, ...但是, 缓冲区仅仅读到了173就已经满了, 对于这种情况, 应该去单独处理缓冲区的不完整的数据的.
2. 数字用逗号隔开.
个人感觉这里使用正则表达式是最好的解决方案了. 使用预编译的Pattern, 效率绝对是有提升的.
3. 找出最大值的数.
个人觉得应该自己实现一个数据结构. 比如我们叫这个数据结构为Top100Mem, 提供两个接口: 1, 读入数据; 2, 输出数据. Top100Mem的读入数据接口只接受一个输入, 对于数值的过滤(关注点: 将比Top100中最小的那个大的留下, 一共只接受Top100. Top100中无重复值.)在读入数据的接口中进行实现; 2, 输出数据则直接展示已经有的Top100数据. 至于该数据结构使用什么基础数据结构, 具体的数值过滤这些应该都是不很重要的.