Java 如何修改PriorityQueue的元素
通常,队列采用先进先出(FIFO)的方式,但PriorityQueue采用基于优先级的方式访问元素。队列的每个元素都有一个与之关联的优先级。元素根据自然排序顺序进行排序。但是,我们可以使用比较器来提供自定义排序。PriorityQueue的元素实际上并不排序,它们只是以排序的顺序获取。这个特性使我们能够轻松地修改PriorityQueue的元素。
Java程序修改PriorityQueue的元素
在进入程序之前,让我们熟悉PriorityQueue的一些内置方法:
- add() - 用于向队列中添加单个元素
-
offer() - 也可以将给定的元素插入到队列中
-
peek() - 用于检索队列的第一个元素
-
remove() - 用于从队列中删除指定的元素
方法1
-
定义一个PriorityQueue集合的对象,并使用’add()’方法存储一些元素。
-
现在,使用’peek()’方法显示队列的第一个元素,然后使用’remove()’方法将该元素从队列中移除。
-
进一步移动,使用内置的’offer()’方法在相同的位置插入一个新的元素。
-
再次显示修改后的第一个元素。
示例
在下面的示例中,我们将修改PriorityQueue的元素。这些元素将根据自然排序顺序进行排序,这意味着它们将以升序访问。
import java.util.*;
public class Modify {
public static void main(String[] args) {
PriorityQueue<Integer> queuePq = new PriorityQueue<>();
// inserting elements
queuePq.add(7);
queuePq.add(9);
queuePq.add(2);
queuePq.add(4);
queuePq.add(3);
System.out.println("Original Queue: " + queuePq);
int head1 = queuePq.peek(); // accessing first element
System.out.println("The first element in Queue: " + head1);
queuePq.remove(2); // removing first element
queuePq.offer(1); // adding new element at first position
int head2 = queuePq.peek(); // accessing first element
System.out.println("The updated first element in Queue: " + head2);
queuePq.offer(2); // adding new element at first position
System.out.println("Newly updated Queue: " + queuePq);
}
}
输出
Original Queue: [2, 3, 7, 9, 4]
The first element in Queue: 2
The updated first element in Queue: 1
Newly updated Queue: [1, 3, 2, 9, 4, 7]
方法2
- 使用内置方法“Collections.reverseOrder()”定义一个PriorityQueue集合对象,以降序存储元素。
-
现在,按照前面的示例描述的步骤进行操作。
示例
在以下示例中,我们将修改PriorityQueue的一个元素。使用比较器对元素进行优先级排序,以提供降序访问。
import java.util.*;
public class Modify {
public static void main(String[] args) {
PriorityQueue<Integer> queuePq = new
PriorityQueue<>(Collections.reverseOrder());
// inserting elements
queuePq.add(7);
queuePq.add(9);
queuePq.add(2);
queuePq.add(1);
queuePq.add(3);
System.out.println("Original Queue: " + queuePq);
int head1 = queuePq.peek(); // accessing first element
System.out.println("The first element in Queue: " + head1);
queuePq.remove(9); // removing first element
queuePq.offer(8); // adding new element at first position
int head2 = queuePq.peek(); // accessing first element
System.out.println("The updated first element in Queue: " + head2);
queuePq.offer(9); // adding new element at first position
System.out.println("Newly updated Queue: " + queuePq);
}
}
输出
Original Queue: [9, 7, 2, 1, 3]
The first element in Queue: 9
The updated first element in Queue: 8
Newly updated Queue: [9, 7, 8, 1, 3, 2]
结论
我们从定义Java Collection Framework中实现Queue接口的PriorityQueue类开始了本文。在下一节中,我们讨论了一些用于修改给定PriorityQueue元素的Java程序中使用的内置方法。