在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
中的元素是唯一的。