我写了这个比较器函数,用于优先级队列。它以这种方式工作正常,它在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值时才会混淆,迫使我相信比较器有问题。我仍然想知道它是如何完美的。