0

我编写了这个比较器函数以与优先级队列一起使用。这种方式效果很好,它在我 poll() 时给出频率最低的单词。

但这是频率,我希望他们以相反的方式表现。我交换了返回值 -1 和 +1,这导致 poll() 上的结果无序和混合。

为什么会发生这种情况,以及如何解决?另外,为什么必须在构造函数中指定比较器时始终指定 PriorityQueue 的初始大小?它有什么我看不到的效果吗?

public class StringFrequencyComparator implements Comparator<Word>
{
    public int compare(Word x, Word y)
    {
        if (x.frequency() < y.frequency())
        {
            return -1;
        }

        if (x.frequency() > y.frequency())
        {
            return +1;
        }
        return 0;
    }
}

更新:我犯了一个错误。我在 PriorityQueue 中插入值,然后更新它们的频率。但是,我很困惑,因为尽管出现了这个错误,但这些命令对于比较器来说是完美的,并且只有在我交换 -1s 和 1s 值时才会混淆,这迫使我相信比较器有问题。我仍然想知道它是如何完美的。

4

0 回答 0