10G文件如何对里面单词出现排序的问题(只要文件系统支持,不限大小)。排序
其实这个问题很简单,10G文件是很大,可是出现的字符或单词是颇有限的。进程
单字符只有那么一百多个,单词数量满打满算,以英文单词总数65万个为例。所有,统称为单词。单词数量按65万个计算。仅仅每一个单词的重复出现(频率)扩大了文件容量而已。即使是100G的文件,出现的单词也是这些。内存
文件绝对不须要全载入内存,只须要顺次读取扫描过滤单词便可。这样才不会占用到多大的内存。map
假如咱们以平均每一个单词10个字节计算,65万*10字节=650万字节,就按6.5M内存计算。而后统计频率用integer,65万*4 = 260万字节,就按2.6M内存计算,合计9.1M内存。算上进程其余开销分配的内存,满打满算,50M总足够了吧。统计
建一个以单词为key,以频率为value的 map,map的总项数,就是65万个。英文
每当都扫描到一个单词,就把 mapname['该单词']++,这样一遍扫描下来,其实这个map就已经完成了全部的单词的频率统计了。文件
而后只须要对这个map进行一下排序便可。前面算过内存满打满算10M足够。文件系统
这样下来,速度也不低,关键是内存用的很是少。字符