在Java中,PriorityQueue
默認情況下不會刪除重復元素
創建一個自定義比較器,根據對象的屬性或者其他標準來比較元素。這樣,即使兩個元素相等,它們也會根據指定的排序標準進行排序。
import java.util.*;
class CustomComparator implements Comparator<Integer> {
@Override
public int compare(Integer o1, Integer o2) {
// 按照降序排列,如果需要升序排列,可以調換 o1 和 o2 的位置
return o2 - o1;
}
}
public class Main {
public static void main(String[] args) {
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(new CustomComparator());
priorityQueue.add(1);
priorityQueue.add(5);
priorityQueue.add(3);
priorityQueue.add(1); // 重復元素
while (!priorityQueue.isEmpty()) {
System.out.println(priorityQueue.poll());
}
}
}
創建一個包裝類,將要添加到 PriorityQueue
的元素作為該類的屬性。然后,在包裝類中實現 Comparable
接口,并根據需要定義 compareTo()
方法。
import java.util.*;
class Element implements Comparable<Element> {
int value;
public Element(int value) {
this.value = value;
}
@Override
public int compareTo(Element other) {
// 按照降序排列,如果需要升序排列,可以調換 this.value 和 other.value 的位置
return other.value - this.value;
}
}
public class Main {
public static void main(String[] args) {
PriorityQueue<Element> priorityQueue = new PriorityQueue<>();
priorityQueue.add(new Element(1));
priorityQueue.add(new Element(5));
priorityQueue.add(new Element(3));
priorityQueue.add(new Element(1)); // 重復元素
while (!priorityQueue.isEmpty()) {
System.out.println(priorityQueue.poll().value);
}
}
}
這兩種方法都可以處理 PriorityQueue
中的重復元素。選擇哪種方法取決于你的具體需求和應用場景。