一亿数据取前100个最大值

最小堆 PriorityQueue 实现

public static void main(String[] args) {
    long l = System.currentTimeMillis();
    int num = 100000000;
    PriorityQueue<Integer> priorityQueue = new PriorityQueue();
    List<Integer> list = new ArrayList<>(num);
    for (int i = 0; i < num; i++) {
        list.add(i);
    }
    Collections.shuffle(list);
    for (int i = 0; i < num; i++) {
        if(i < 100){
            priorityQueue.add(list.get(i));
        }else{
            Integer peek = priorityQueue.peek();
            Integer integer = list.get(i);
            if (integer < peek) {
                continue;
            }
            priorityQueue.poll();
            priorityQueue.add(integer);
        }
    }
    for (int i = 0; i < 100; i++) {
        System.out.println(priorityQueue.poll());
    }
    System.out.println("用时:"+((System.currentTimeMillis()-l)/1000)+"秒");
}

 

posted @ 2022-08-02 10:58  java架构师1  阅读(51)  评论(0)    收藏  举报