文章40 | 阅读 14784 | 点赞0
java的底层结合了很多数据结构的变化,随着时代的进步,java也与时俱进。HashMap中的红黑树
、AQS中的CLH队列
、内置的堆栈工具类
。
大小堆算法常常用于计算topk问题求解问题,
而java实际上就已经帮我们写好了,并且集成进jdk类库中。
topk问题可以用下面的优先队列来求解,默认下使用的是最小堆,可以通过传入比较器Comparator 接口
来实现最大堆的求解。PriorityQueue
示例代码如下:
import java.util.ArrayList;
import java.util.PriorityQueue;
import java.util.Random;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入k值:");
int k = sc.nextInt();
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Integer::compareTo);
Random random = new Random();
ArrayList<Integer> integers = new ArrayList<>();
for (int i = 0; i < 100; i++) {
int num = random.nextInt(50);
integers.add(num);
priorityQueue.add(num);// 加入优先队列中
}
for (int i = 0; i < k; i++) {
System.out.print(priorityQueue.poll()+" ");// 从队列中取出一个
}
System.out.println("\n所有元素排序后的结果:");
integers.sort(Integer::compareTo);
System.out.println(integers);
}
}
其中的一次执行结果如下,求top5问题
请输入k值:5
1 1 2 2 3
所有元素排序后的结果:
[1, 1, 2, 2, 3, 4, 4, 6, 6, 7, 7, 7, 7, 7, 8, 8, 9, 9, 10, 11, 11, 11, 11, 12, 13, 14, 14, 14, 14, 15, 15, 16, 17, 17, 17, 19, 20, 21, 21, 21, 22, 22, 22, 22, 22, 23, 24, 25, 26, 27, 28, 28, 29, 29, 29, 29, 30, 31, 31, 31, 32, 32, 32, 32, 32, 33, 34, 34, 34, 35, 35, 35, 36, 36, 38, 38, 38, 39, 39, 40, 42, 42, 42, 42, 42, 43, 45, 45, 46, 46, 46, 46, 46, 47, 48, 49, 49, 49, 49, 49]
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://yumbo.blog.csdn.net/article/details/118671366
内容来源于网络,如有侵权,请联系作者删除!