手段:用扩展的归并排序
归并排序(一个稳定的排序)
精髓在于不断选各个组最小的数。
K路归并
上面举的例子是二路归并,每次选两组数据头部最小的数据就可以了,仅仅比较一次,但是K路归并,也就是要选K组数据头部最小的数据就没有这么容易了 。我们要用到堆的数据结构,这个堆是个完全二叉树,根是树中最小的元素,子树的根也是子树的最小元素
库函数有PriorityQueue实现了这个堆算法
将归并好的数据送入归并节点也需要注意,因为归并节点的内存没有10G。解决办法就是每次把K组数据头部的最小的一批数据送入内存。
假如一组数据都被读完了就从硬盘/网络中再调一批。
我们发现管理缓冲区非常麻烦,这时就要使用iterable< T >的接口,这是一个位于内存和网络/文件间的一个接口,专门用来管理缓冲区