比较器无法正常运行PriorityQueue

时间:2013-02-18 07:31:39

标签: java priority-queue comparator

我写了这个比较器函数,用于优先级队列。它以这种方式工作正常,它在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中插入值,然后更新它们的频率。但是,我很困惑,因为尽管存在这个错误,但是比较器的命令是完美的,只有当我交换-1和1s值时才会混淆,迫使我相信比较器有问题。我仍然想知道它是如何完美的。

0 个答案:

没有答案