`

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...

    g-p.rar_G-P_G——p_Matlab关联维数_关联维数_关联维数G-P

    总结来说,"g-p.rar_G-P_G——p_Matlab关联维数_关联维数_关联维数G-P"这个压缩包文件提供了一个基于Matlab的G-P方法实现,用于计算混沌系统的时间序列数据的关联维数,从而帮助我们理解和分析系统的复杂动态行为。...

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

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

    数字练习题答案.txt

    编写一个Java程序,找出100至999之间所有的水仙花数。水仙花数是指一个三位数,其各个位上的数字立方和等于该数本身。例如,153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。 #### 解析 代码通过循环遍历100到999...

    Oracle 最大并发数、会话数查询

    这将显示SQL语句文本、执行计数、CPU时间等信息,帮助你分析系统性能和找出潜在的性能瓶颈。 总结来说,掌握Oracle数据库的并发数和会话数的查询与调整方法,对于数据库管理员来说至关重要,这有助于优化资源分配,...

    MSP430G2553小系统电路原理图及PCB图.zip

    "压缩包子文件的文件名称列表"中的"MSP430G2553小系统电路原理图及PCB图"提供了具体的设计图纸,可以作为实际操作的参考。在查看这些图纸时,我们可以了解每个元器件的位置、连接方式以及走线布局,这有助于理解和...

    SQL数据库对于海量数据面试题及答案.pdf

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

    mysql数据库my.cnf配置文件

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

    大数据量,海量数据处理

    12. 给定100w个数中,需要找最大的前100个数。解决方法是使用堆排序来输出最大的前100个数。 13. 需要寻找热门查询:搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255...

    计算介数的matlab程序

    该压缩包文件包含一个名为"GraphBetweennessCentrality.m"的Matlab脚本,这是一个用于计算图中所有节点介数中心度的程序。下面将详细介绍介数中心度的概念,以及如何使用Matlab来计算它。 **介数中心度...

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

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

    阿里大数据笔试

    这个问题要求处理一个100GB的日志文件,统计其中每个英文单词出现的频率,并打印出出现次数最多的10个不重复的单词。在Java或Python中,可以使用MapReduce或Pandas等工具进行分布式处理。首先,需要将大文件切分成...

    16进制文件转换和查看工具xxd(windows版)

    你可以通过这个功能来检查文件的字节序列,找出可能存在的问题。 2. **转换功能**:除了查看,xxd还能将文件从二进制格式转换为ASCII文本,或者相反,将ASCII文本转换回二进制。这对于在文本编辑器和二进制文件之间...

    批处理统计文件夹内的所有文件的数量和总大小的bat

    在日常计算机使用过程中,我们经常会遇到磁盘空间不足的问题,尤其是当磁盘空间变化异常时(如文中所述的磁盘空间无明显原因减少后又逐渐恢复的情况),我们需要对磁盘上的文件进行详细的分析,以便找出占用大量空间...

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

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

    面试 大数据 算法解析

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

    支持向量机的数字识别的程序

    最后,通过找出计数数组`num`中的最大值及其索引来确定最终的分类结果。 #### 五、总结 通过以上分析,我们可以看到基于SVM的数字识别系统是一种有效的方法。它利用SVM的强大分类能力来处理复杂的数字识别任务。...

    gcode.rar_dangerous6fn_fireplace92l_gcode照片转_图片转换Gcode_文字转gcode

    2. 图像轮廓提取:通过边缘检测算法(如Canny、Sobel等)找出图像中的线条,这些线条将成为G代码中的路径。 3. 路径优化:将提取的线条转换为连续的、适合机床执行的路径,这可能涉及到直线和曲线的平滑处理。 4. G...

    2000年数模竞赛中40个人工序列与182个自然序列

    在2000年的数模竞赛中,一个挑战涉及到40个人工序列和182个自然序列的处理。这些序列很可能与生物信息学中的DNA序列分析相关,因为标签明确指出是“DNA序列”。在生物科学领域,DNA(脱氧核糖核酸)是遗传信息的基础...

    常州博大数控切割机程序备份

    【常州博大数控切割机程序备份】主要涉及的是数控切割技术在实际应用中的一个重要环节——数据保护与恢复。数控切割机是现代制造业中广泛应用的一种设备,尤其在金属板材加工领域,能够实现高精度、高效率的切割作业...

Global site tag (gtag.js) - Google Analytics