- 关于优先级队列PriorityQueue要知道的几点:
1.可以直接用接口new来创建,它是线程不安全的,但是PriorityBlockingQueue是线程安全的; 2.其中的元素必须能够比较大小,否则会抛ClassCastexception异常(数字越小,优先级越高); 3.不能插入null对象; 4.内部可以自动扩容,没有容量限制; 5.底层为堆数据结构,所以其插入、删除的时间复杂度为O(logN); - 应用:找最小的k个数,如:
PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
int[] array = new int[20];
Random random = new Random(1);
for(int i=0; i<20; i++){
array[i] = random.nextInt(100);
pq.offer(array[i]);
System.out.print(array[i]+" ");
}
System.out.println();
System.out.println("取前10位:");
for(int i=0; i<10; i++){
System.out.print(pq.poll()+" ");
}
|