java的优先级队列
时间: 2023-11-10 18:03:49 浏览: 112
Java中的优先级队列是一种特殊的队列,其中每个元素都有一个优先级。在插入元素时,会根据其优先级自动排序,优先级高的元素排在队列前面。在删除元素时,会删除优先级最高的元素。
Java中的优先级队列可以使用PriorityQueue类来实现。以下是一个示例代码:
```
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.add(5);
pq.add(1);
pq.add(10);
System.out.println(pq.poll()); // 输出1
System.out.println(pq.poll()); // 输出5
System.out.println(pq.poll()); // 输出10
```
相关问题
java 优先级队列
Java中的优先级队列是一种特殊的队列,其中每个元素都有一个优先级。当元素被添加到队列中时,它会根据其优先级被插入到正确的位置上,而不是按照它们被添加到队列中的顺序。
Java中的优先级队列可以使用 PriorityQueue 类来实现。以下是一个示例代码:
```
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.add(5);
pq.add(1);
pq.add(10);
System.out.println(pq.poll()); // 输出 1
System.out.println(pq.poll()); // 输出 5
System.out.println(pq.poll()); // 输出 10
```
在上面的代码中,我们创建了一个整数类型的优先级队列,并向其中添加了三个元素。然后,我们使用 poll() 方法从队列中取出元素。由于元素是按照它们的优先级排序的,因此我们得到的结果是 1、5 和 10。
java优先级队列使用
Java中的PriorityQueue是一种优先级队列,它可以按照元素的优先级进行排序,以下是使用PriorityQueue的一些常见操作:
1. 创建PriorityQueue对象
可以使用无参构造函数创建一个空的PriorityQueue对象,也可以使用带有Comparator参数的构造函数来创建一个带有指定比较器的PriorityQueue对象。
```java
PriorityQueue<Integer> pq = new PriorityQueue<>();
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder()); // 创建一个降序的PriorityQueue对象
```
2. 添加元素
可以使用add()或offer()方法将元素添加到PriorityQueue中。
```java
pq.add(10);
pq.offer(20);
```
3. 获取队列头部元素
可以使用peek()或element()方法获取队列头部元素,如果队列为空,则会返回null或抛出NoSuchElementException异常。
```java
Integer head = pq.peek();
```
4. 删除队列头部元素
可以使用poll()或remove()方法删除队列头部元素,如果队列为空,则会返回null或抛出NoSuchElementException异常。
```java
Integer head = pq.poll();
```
5. 获取队列大小
可以使用size()方法获取队列中元素的个数。
```java
int size = pq.size();
```
6. 遍历队列
可以使用迭代器或for-each循环遍历PriorityQueue中的元素。
```java
for (Integer num : pq) {
System.out.print(num + " ");
}
Iterator<Integer> it = pq.iterator();
while (it.hasNext()) {
System.out.print(it.next() + " ");
}
```
7. 自定义优先级
可以自定义一个比较器来指定元素的优先级,将该比较器作为PriorityQueue的构造函数参数传入。
```java
PriorityQueue<Student> pq = new PriorityQueue<>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
return s1.getScore() - s2.getScore();
}
});
```
以上是一些PriorityQueue的常见操作,可以根据具体的需求进行使用。
阅读全文