【问题标题】:How to sort a PriorityQueue when custom object attribute changes?自定义对象属性更改时如何对 PriorityQueue 进行排序?
【发布时间】:2021-08-01 05:21:27
【问题描述】:

我正在尝试在 java 中使用自定义 Comparator 为此类基于 member1 排序的类实现 PriorityQueue。

    class Custom
{
    int member1;
    int member2;
    public Custom(int n, int m)
    {
        this.member1 = n;
        this.member2 = m;
    }
    public String toString()
    {
        return this.member1+" "+this.member2;
    }
}

最初我创建了两个对象并将它们添加到 PQ 并按预期排序。但是当我去更改其中一个对象的 member1 的值时,当我 poll() 时队列的顺序错误。如何实现此功能?简而言之,一旦将对象添加到 PQ 中,它就不会考虑该对象的属性以后是否发生了变化。

【问题讨论】:

    标签: java collections heap comparator priority-queue


    【解决方案1】:

    您应该从队列中删除该对象并重新添加,以便正确排序。队列不知道内部对象的变化。

    【讨论】:

    • 您能否分享对此的参考,以便我可以深入了解此内容。你是对的,但我想深入了解一下。我试图解决这个问题以实现 dijkstra 算法。
    • Java 中没有一个好的 解决方案。 Dijkstra 算法的典型 Java 实现将简单地将 new Custom 值添加到队列中,并从队列中跳过已访问顶点的条目。
    猜你喜欢
    • 2011-02-16
    • 2014-06-26
    相关资源
    最近更新 更多