【问题标题】:How do we delete an object from Priority Queue of user defined data type我们如何从用户定义数据类型的优先级队列中删除对象
【发布时间】:2021-06-29 17:44:23
【问题描述】:
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());
       
       
       

    }


}

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

【问题讨论】:

    标签: java priority-queue


    【解决方案1】:

    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() 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多