Java 中的 PriorityQueue remove() 方法
PriorityQueue 类的 remove() 方法 在 java.util 包中使用, 用于从 PriorityQueue 中删除特定元素。 就像我们都知道,元素进入优先队列时并没有排序,但我们都知道从优先队列中取出元素时元素总是排序的,这是优先队列的一个特征。这里数据类型的元素的默认优先级顺序定义如下:
- Integer :最小的元素排在第一位(仅处理正数时)
- String :按字母顺序排列
注意: 创建该类的实例时,我们还可以插入 Comparator,告诉我们应该如何定义优先级。
语法:
PriorityQueue<String> = new PriorityQueue<String>(ComparatorHere);
语法: Remove 方法
Priority_Queue.remove(Object O)
参数: 参数 O 是 PriorityQueue 类型的参数,并指定要从 PriorityQueue 中删除的元素。
返回值: 如果指定的元素在队列中存在,则此方法返回 true,否则返回 false。
示例 1
// Java 程序演示 remove() 方法
// 在 PriorityQueue 中
// 其元素为 String 类型。
// 导入所有实用程序类
import java.util.*;
//主类 PriorityQueueDemo
public class GFG {
// Main driver method
public static void main(String args[])
{
// 创建一个空的 PriorityQueue,
// 其中元素为字符串类型
PriorityQueue<String> queue
= new PriorityQueue<String>();
// 使用 add() 方法将元素添加到队列中
queue.add("Welcome");
queue.add("To");
queue.add("Geeks");
queue.add("For");
queue.add("Geeks");
// 打印 PriorityQueue 的元素
System.out.println("Initial PriorityQueue: "
+ queue);
// 使用 remove() 方法从 PriorityQueue 中删除元素
queue.remove("Geeks");
queue.remove("For");
queue.remove("Welcome");
// 显示移除元素后的 PriorityQueue
System.out.println("PriorityQueue after removing "
+ "elements: " + queue);
}
}
输出
Initial PriorityQueue: [For, Geeks, To, Welcome, Geeks]
PriorityQueue after removing elements: [Geeks, To]
示例 2
// Java程序演示了PriorityQueue类的remove()方法
// 元素类型为整数
// 导入所需的类
import java.util.*;
// 主类
// PriorityQueueDemo
public class GFG {
// 主驱动程序方法
public static void main(String args[])
{
// 创建一个空的PriorityQueue对象
// 创建一个整数类型的对象
PriorityQueue<Integer> queue
= new PriorityQueue<Integer>();
// 使用add()方法添加指定元素
queue.add(10);
queue.add(15);
queue.add(30);
queue.add(20);
queue.add(5);
// 输出PriorityQueue
System.out.println("初始PriorityQueue: "
+ queue);
// 使用remove()方法从PriorityQueue中删除元素
queue.remove(30);
queue.remove(5);
// 输出删除元素后的PriorityQueue
System.out.println("删除元素后的PriorityQueue: " + queue);
}
}
输出:
初始PriorityQueue: [5, 10, 30, 20, 15]
删除元素后的PriorityQueue: [10, 20, 15]
极客们,你们是否曾想过,如果remove()方法的调用次数超过队列中的元素数量将会发生什么。在这种情况下,它将继续删除已经存在的元素,然后它将不会按优先顺序找到任何元素来删除,因此它将抛出一个如下所示的异常。
注意: 该类实现了抽象队列接口。
示例
// Java程序演示remove() 方法
// 在优先队列中
// 当有异常时
// 导入所需类
import java.io.*;
import java.util.PriorityQueue;
// 主类
// PriorityQueueException
class GFG {
// 主驱动程序方法
public static void main(String[] args)
{
// 创建一个空的PriorityQueue
PriorityQueue<Integer> pq
= new PriorityQueue<Integer>();
// 注意:元素按未排序的顺序插入到
// 优先队列,但在删除元素后
// 队列总是有序的。
// 使用add() 方法将元素添加到以上队列中
pq.add(2);
pq.add(14);
pq.add(41);
pq.add(7);
pq.add(99);
// 目前队列中的元素是未排序的
// 使用size() 方法删除任何元素之前获得以上队列的大小
System.out.println(
"删除之前的优先队列大小:"
+ pq.size());
// 打印以上队列中的所有元素
System.out.println(
"移除之前的优先队列:" + pq);
// 在包含5个元素的优先队列中调用remove() 方法
// 在此调用remove() 方法,例如2次
// 因此,将删除2个最优先的元素
System.out.println("已删除第1个元素:"
+ pq.remove());
System.out.println("已删除第2个元素:"
+ pq.remove());
System.out.println("已删除第3个元素:"
+ pq.remove());
System.out.println("已删除第4个元素:"
+ pq.remove());
System.out.println("已删除第5个元素:"
+ pq.remove());
// 到目前为止队列为空,如果现在我们继续进行remove() 调用,它将因此抛出异常
System.out.println("已删除第6个元素:"
+ pq.remove());
// 我们知道整数越小,优先级越大
// 这个类的默认比较器
// 注意:优先级队列现在始终以排序的方式返回元素是此类的一个特征
// 打印优先级元素删除后的队列
System.out.println(
"删除优先级元素后的优先队列如下:"
+ pq);
}
}
输出:

输出解释:
它展示了队列中没有更多元素,因为队列现在为空,因此它引发NoSuchElementException。
极客教程