如何在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元素的内置方法。

更新于:2023年7月20日

468 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告