如何在Java中修改PriorityQueue的元素?
通常,队列遵循先进先出 (FIFO) 的方法,但PriorityQueue在访问元素时遵循基于优先级的策略。队列的每个元素都有一个与其关联的优先级。元素根据自然排序顺序进行优先级排序。但是,我们可以使用比较器提供自定义排序。PriorityQueue的元素实际上并没有排序,它们只是按排序顺序检索。此功能使我们可以轻松修改PriorityQueue的元素。
修改PriorityQueue元素的Java程序
在深入研究程序之前,让我们先熟悉PriorityQueue的一些内置方法:
add() − 用于向队列添加单个元素
offer() − 它也用于将给定元素插入队列。
peek() − 用于检索队列的第一个元素。
remove() − 用于从队列中移除指定的元素。
方法一
定义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]
方法二
使用名为‘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集合框架的PriorityQueue类(它实现了Queue接口)开始本文。在下一节中,我们讨论了一些在Java程序中用于修改给定PriorityQueue元素的内置方法。
广告