维护一个容量为k的小根堆,以流的方式读取数据,向堆中添加数据 如果小根堆没满直接填 满了之后比较当前读取数据和堆顶数组,如果当前数据更大,弹出堆顶,添加大数
对于大数据问题如果有多台机器也可以分割文件分别取最大的K个,然后再逐渐合并
public class arrTest {
public static void main(String[] args){
PriorityQueue<Integer> queue=new PriorityQueue<>(3);
int[] arr=new int[]{2,1,4,6,5,6,2,7};
getMin3(arr,queue);
while (!queue.isEmpty())
{
System.out.print(queue.poll());
}
}
public static void getMin3(int[] arr, PriorityQueue<Integer> queue){
for(int i=0;i<arr.length;i++){
if (queue.size()!=3){
queue.add(arr[i]);
}else {
if (arr[i]>queue.peek()){//如果当前数字大于小根堆最小数字
queue.poll();
queue.add(arr[i]);
}
}
}
}
}