永兴网站制作,软件二次开发什么意思,HTML网站建设课程,建模外包网站原文链接#xff1a;https://blog.csdn.net/ohwang/article/details/116934308 PriorityQueue 又叫 优先队列 注意1#xff1a; PriorityQueue是用数组实现#xff0c;数组大小可以动态增加#xff0c;容量无限。 优先队列采用的是堆排序#xff08;默认为最小堆#xff…原文链接https://blog.csdn.net/ohwang/article/details/116934308 PriorityQueue 又叫 优先队列 注意1 PriorityQueue是用数组实现数组大小可以动态增加容量无限。 优先队列采用的是堆排序默认为最小堆。堆排序只能保证根是最大最小整个堆并不是有序的。
注意2 非线程安全。线程安全可以用PriorityBlockingQueue。
注意3 不允许使用 null 元素。
注意4 offer()、poll()、remove() 、add() 时间复杂度为O(log(n)) 。 remove(Object) 和 contains(Object) 时间复杂度为O(n)。 peek、element 、size 时间复杂度为O(常量)。
注意5 方法iterator()中提供的迭代器并不保证以有序的方式遍历优先级队列中的元素。 如果需要按顺序遍历可用Arrays.sort(pq.toArray())。
注意6 可以在构造函数中指定如何排序。
# 默认的初始容量11
PriorityQueue(int initialCapacity)
# 使用指定的初始容量创建一个 PriorityQueue并根据其自然顺序来排序其元素。PriorityQueue(int initialCapacity, Comparator? super E comparator)
# 使用指定的初始容量创建一个 PriorityQueue并根据指定的比较器comparator来排序其元素。注意7 此类及其迭代器实现了 Collection 和 Iterator 接口的所有可选 方法。 # 默认升序
PriorityQueueInteger queue2 new PriorityQueue(10);
queue2.offer(11);
queue2.offer(9);
int len queue2.size();
for (int i 0; i len; i) {System.out.println(queue2.poll());
}
//输出 9 11# 自定义降序
PriorityQueueInteger queue new PriorityQueue(10, (a, b) - b - a);
queue.offer(13);
queue.offer(9);
int len1 queue.size();
for (int i 0; i len1; i) {System.out.println(queue.poll());
}
//输出 13 9# 模拟业务使用
PriorityQueuePeople queue new PriorityQueue(11, (p1, p2) - p2.age - p1.age);
for (int i 1; i 10; i) {queue.add(new People(张 i, (new Random().nextInt(100))));
}
while (!queue.isEmpty()) {System.out.println(queue.poll().toString());
}class People {String name;int age;public People(String name, int age) {this.name name;this.age age;}public String toString() {return 姓名 name 年龄 age;}
}姓名张9 年龄67
姓名张1 年龄66
姓名张8 年龄65
姓名张7 年龄54
姓名张4 年龄48
姓名张2 年龄41
姓名张5 年龄39
姓名张3 年龄26
姓名张6 年龄11
姓名张10 年龄0