`

100G的大文件中找出100个最大的数

 
阅读更多

题目:有一个100G大小的文件里存的全是数字,并且每个数字见用逗号隔开。现在在这一大堆数字中找出100个最大的数出来。
程序:

 

public class Pick100 {
    //TreeSet排序效率最高
    private TreeSet<Double> treeSet = null;
    
    public Pick100(){
        treeSet = new TreeSet<Double>();
    }
    
    /**
     * 读取文件并放到集合treeSet中
     * @param fileName
     */
    public void doPick(String fileName){
        File file = new File(fileName);
        InputStream is = null;
        //一次读1024个字节
        byte[] b = new byte[1024];
        
        try {
            is = new BufferedInputStream(new FileInputStream(file));
            //每次取一定长度字节
            while(is.read(b) > 0){
                //转换为字符串
                String str = new String(b);
                //用逗号拆分成数组
                String[] numArr = str.split(",");
                //为了防止一个数字被截断而不完整,先保留最后一个数字
                String lastNum = "";
                
                //把数组中的数值放到集合中
                for(int i=0;i<numArr.length;i++){
                    String numStr = numArr[i];
                    Double num = new Double(numStr);
                    if(i == 0){
                        if(lastNum != null){
                            numStr = lastNum+numStr;
                        }
                    }else if(i == numArr.length-1){
                        lastNum = numStr;
                    }else{
                        treeSet.add(num);
                    }
                    
                    if(treeSet.size()>100){
                        treeSet.remove(treeSet.first());
                    }
                }
            }
            
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    
    /**
     * 打印treeSet中的数据
     *
     */
    public void print(){
        Iterator<Double> it = treeSet.iterator();
        while(it.hasNext()){
            Double db = it.next();
            System.out.println(db);
        }
    }
    
    public static void main(String[] args){
        Pick100 pick = new Pick100();
        pick.doPick("numbers.txt");
        pick.print();
    }
}

 

分享到:
评论

相关推荐

    semasio-test:给定一个整数数组,从数组中找出两个数的最大乘积,即 3 的倍数

    要求给定一个整数数组,从数组中找出两个数的最大乘积,即 3 的倍数。 输入 {6,8,8,7,2,5} 的结果应该是 48 = 6 8。请注意,8 8 是最大的乘积 (64),但 64 不能被 3 整除。 给定输入 {1,9,2,4},结果应该是 36 = 9 4...

    PilotEdit支持超过400G的文件编辑

    通过这个功能,我们可以很方便地找出第一个文件中存在而第二个文件中不存在的行  11、自定义字符串表  &gt;单击即可添加一个自定义的字符串  &gt;在所选文本的前后分别添加自定义的字符串  12、正则表达式  &gt;用...

    c程序设计习题参考(谭浩强三版)习题参考解答

    9.7分别用函数和带参的宏,从3个数中找出最大数。 70 9.8试述“文件包含”和程序文件的连接(link)的概念,二者有何不同? 71 9.9用条件编译法实现以下功能: 71 第10章 指针 72 10.1输入3个整数,按由小到大的顺序...

    mysql数据库my.cnf配置文件

    # 你的操作系统在这个队列大小上有它自己的限制(可以检查你的OS文档找出这个变量的最大值),试图设定back_log高于你的操作系统的限制将是无效的。 max_connections = 500 # MySQL的最大连接数,如果服务器的并发...

    入门学习Linux常用必会60个命令实例详解doc/txt

    -n:一般而言,mount挂上后会在/etc/mtab中写入一笔资料,在系统中没有可写入文件系统的情况下,可以用这个选项取消这个动作。 4.应用技巧 在Linux 和Unix系统上,所有文件都是作为一个大型树(以/为根)的一部分...

    大数据面试题(2).docx

    对每个小文件,统计每个文件中出现的词以及相应的频率(可以采用trie树/hash_map等),并取出出现频率最大的100个词(可以用含100个结点的最小堆),并把100词及相应的频率存入文件,这样又得到了5000个文件。...

    上海电机学院C语言实训答案

    (12)编写程序验证以下说法:输入一个4位数,该数个、十、百、千位上的数互不相等,由个、十、百、千位上的数组成一个最大数和一个最小数,最大数-最小数,构成一个新的4位数。反复以上运算,使其最终结果为:6174...

    面试 大数据 算法解析

    2.有一个1G大小的一个文件,里面每一行是一个词 3.给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 4.在2.5亿个整数中找出不重复的整数 5.腾讯面试题:给40亿个不...

    功能超级强悍的文本编辑器 PilotEdit 14.3.0 + x64 中文多语免费版.zip

    通过这个功能,我们可以很方便地找出第一个文件中存在而第二个文件中不存在的行 11. 自定义字符串表 &gt;单击即可添加一个自定义的字符串 &gt;在所选文本的前后分别添加自定义的字符串 12. 正则表达式 &gt;用正则表达式查找/...

    PilotEdit Lite v12.7.0.zip

    通过这个功能,我们可以很方便地找出第一个文件中存在而第二个文件中不存在的行 11. 自定义字符串表 单击即可添加一个自定义的字符串 在所选文本的前后分别添加自定义的字符串 12. 正则表达式 用正则表达式查找...

    文件浏览增强工具 Listary Pro 5.00 Build 2843.zip

    Windows 系统发展了几十年,版本更新了数代,但系统中文件打开/保存对话框的操作方式却没有多少改善,即使在目前最新的 Windows 8.1 中,在该对话框中浏览文件的方式依然如此繁琐、低效,一直为大多数用户所诟病。...

    算法分析与设计习题集答案

    26、 设计一个O(n2)时间的算法,找出由n个数组成的序列的最长的单调递增子序列。 27、 旅游预算问题。一个旅行社需要估算乘汽车从某城市到另一城市的最小费用,沿路有若干加油站,每个加油站收费不一定相同。旅游...

    everything

    只要大概知道你的文件名包含哪几个字,就可以把文件找出来,而且速度极快 2009-9-1 11:02:29 5分 【comme】 不清楚,我只是自己用着好就发上来了 2008-11-27 17:53:12 3分 【xjdonkey】 用ava find很久了,感觉...

    MP3格式解析

    最后4个字节表示ID3V2标签的大小,在实际寻找首帧的过程中,我发现大部分的mp3文件的标签大小是包含标签头的,但有的又是不包含的,可能是某些mp3编码器写标签的BUG,所以为了兼容只好认为其是包含的,如果按大小找...

    javascript入门笔记

    Javascript Basic 1、Javascript 概述(了解) Javascript,简称为 JS,是一款能够运行在 JS解释器/引擎 中的脚本语言 ... 1、定义一个函数 change ,该函数中接收两个参数(a,b) 2、在函数体中,如果 a 大于 b的话...

    同学的打包代码

    给出学生姓名(有可能不住在宿舍中)找出他(她)所在的房间号。 给出房间号(有可能不存在),给出该房间中入住的所有学生的姓名,查询结果的排序依据为学生的姓名,可升序或降序排列。 注意:在显示信息时必须合理...

    维宏5.4.49

    在一般的数控系统中,两条G指令之间的连接速度通常是一个固定的值(例如等于零或者某一个很小的值)。在新版数控系统中,采用了独有的加工速度自适应预测算法。该算法根据连接速度的大小、方向、最大加速度,以及前...

    计算机应用基础答案(1).doc

    处理报表,只需要象开荒一样 ,在这巨大的工作表中随便选一个区域输入数据即可,当然一般都直接在靠近左上角的 区域处理,用Excel处表报表的最大优点是可以使用公式(就是前面提到的=开头的算式 ),而Excel公式的...

    网管教程 从入门到精通软件篇.txt

    Axx:ARJ压缩文件的分包序号文件,用于将一个大文件压至几个小的压缩包中(xx取01-99的数字) A3L:Authorware 3.x库文件 A4L:Authorware 4.x库文件 A5L:Authorware 5.x库文件 A3M,A4M:Authorware Macintosh...

    维宏软件Ncstudio_V5.4.49_中文

    在一般的数控系统中,两条G指令之间的连接速度通常是一个固定的值(例如等于零或者某一个很小的值)。在新版数控系统中,采用了独有的加工速度自适应预测算法。该算法根据连接速度的大小、方向、最大加速度,以及前...

Global site tag (gtag.js) - Google Analytics