在Java中,PriorityQueue默認情況下不允許重復元素。但是,你可以通過實現Comparator
接口來自定義比較規則,從而實現處理重復元素的目的。下面是一個使用自定義比較器處理重復元素的示例:
import java.util.Comparator;
import java.util.PriorityQueue;
public class PriorityQueueWithDuplicates {
public static void main(String[] args) {
// 創建一個包含重復元素的整數列表
Integer[] elements = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
// 使用自定義比較器創建一個優先隊列
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// 如果兩個元素相等,返回0(表示它們可以被認為是重復的)
if (o1.equals(o2)) {
return 0;
}
// 否則,使用默認的比較規則
return o1 - o2;
}
});
// 將元素添加到優先隊列中
for (Integer element : elements) {
priorityQueue.add(element);
}
// 從優先隊列中刪除并打印元素
while (!priorityQueue.isEmpty()) {
System.out.println(priorityQueue.poll());
}
}
}
在這個示例中,我們創建了一個包含重復元素的整數列表,并使用自定義比較器創建了一個優先隊列。當兩個元素相等時,比較器返回0,這意味著它們可以被認為是重復的。最后,我們從優先隊列中刪除并打印元素。