在Java中,PriorityQueue
本身并不保证元素的唯一性。如果你想要确保 PriorityQueue
中的元素唯一,可以在将元素添加到队列之前进行检查。这里有一个简单的方法来实现这个功能:
Comparator
),用于比较两个对象是否相等。PriorityQueue
之前,使用这个比较器检查元素是否已经存在于队列中。下面是一个示例代码:
import java.util.Comparator;
import java.util.HashSet;
import java.util.PriorityQueue;
import java.util.Set;
public class UniquePriorityQueue {
public static void main(String[] args) {
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(new UniqueComparator());
Set<Integer> set = new HashSet<>();
// 添加元素到优先队列和集合中
addElement(priorityQueue, set, 5);
addElement(priorityQueue, set, 3);
addElement(priorityQueue, set, 5); // 这个元素将被忽略,因为它已经存在于队列中
addElement(priorityQueue, set, 10);
// 打印优先队列中的元素
while (!priorityQueue.isEmpty()) {
System.out.println(priorityQueue.poll());
}
}
private static void addElement(PriorityQueue<Integer> priorityQueue, Set<Integer> set, int value) {
if (!set.contains(value)) {
set.add(value);
priorityQueue.offer(value);
}
}
static class UniqueComparator implements Comparator<Integer> {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
}
}
在这个示例中,我们创建了一个名为 UniqueComparator
的自定义比较器,用于比较两个整数是否相等。我们还创建了一个 Set
,用于存储已经添加到 PriorityQueue
中的元素。当我们尝试将一个新元素添加到队列时,我们会先检查它是否已经存在于集合中。如果不存在,我们将其添加到集合和队列中。这样,我们可以确保 PriorityQueue
中的元素是唯一的。