阅读量:0
在Java中,PriorityQueue
默认情况下不会删除重复元素
- 使用自定义比较器(Comparator):
创建一个自定义比较器,根据对象的属性或者其他标准来比较元素。这样,即使两个元素相等,它们也会根据指定的排序标准进行排序。
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
中的重复元素。选择哪种方法取决于你的具体需求和应用场景。