我们如何从用户定义数据类型的优先级队列中删除对象


class Solution{
static class pair implements Comparable<pair> {
int a, b;
@Override
public int compareTo(pair o) {
return (a-o.a);
}
public pair(int a, int b) {
this.a = a;
this.b = b;
}
}
public static void main(String[] args) {
PriorityQueue<pair> min = new PriorityQueue<>();
min.add(new pair(9,0));
min.add(new pair(2,4));
pair p=new pair(2, 4);
min.remove(p);
System.out.println(min.size());



}

}

如何从优先级队列中删除pair-type元素。这个.remove((方法似乎不适用于用户定义的类型类。

PriorityQueue实现的remove()方法使用对象equals()方法来检查对象是否相等。该方法的默认实现检查引用相等性,而在您的情况下没有给出该引用相等性。因此,您应该覆盖Pair类中的equals()方法,类似于(或类似于(以下内容:

@Override
public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof Pair)) {
return false;
}
Pair pair = (Pair) o;
return pair.a == a && pair.b == b;
}

为了获得良好的实践,您还应该重写Pair类的hashCode()方法。

最新更新