1:PriorityQueue
是 Java 中提供的一个优先队列实现,它可以用来实现最小堆或最大堆。在 PriorityQueue
中,元素按照它们的优先级(通过比较器或元素的自然顺序)进行排序。
2:创建 PriorityQueue: 可以使用无参构造函数创建一个默认的最小堆,或者通过传递比较器来创建最大堆。
// 默认创建最小堆
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
// 创建最大堆
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
3:添加元素: 使用 add()
或 offer()
方法将元素添加到队列中。
minHeap.add(5);
minHeap.offer(10);
4:获取队头元素: 使用 peek()
方法获取队头元素,该元素是队列中优先级最高的元素。
int topElement = minHeap.peek();
5:弹出队头元素: 使用 poll()
方法弹出并返回队头元素。
int poppedElement = minHeap.poll();
6:遍历 PriorityQueue: 通过迭代器或转换为数组来遍历队列中的元素。
Iterator<Integer> iterator = minHeap.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
// 或者转换为数组
Object[] array = minHeap.toArray();
7:如何构建比较器(Comparator):
比较器是一个用于定义元素比较规则的接口,通常用于在集合(例如 PriorityQueue
)中排序元素。在 Java 中,可以通过创建匿名类或使用 Lambda 表达式来构建比较器。
使用匿名类:
Comparator<Integer> minComparator = new Comparator<Integer>() {
@Override
public int compare(Integer a, Integer b) {
return a - b; // 升序排列
}
};
使用 Lambda 表达式:
Comparator<Integer> minComparator = (a, b) -> a - b; // 升序排列
比较器规则:比较器默认升序排列,规定返回正值a在b后面,返回负值a在b前面,
因此return a-b;是升序return b-a;是降序。