このコンパレータ関数は、プライオリティ キューで使用するために作成しました。この方法で問題なく動作し、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 の値を交換したときにのみ混同され、コンパレーターに何か問題があると信じるようになったため、混乱しました。どうして完璧だったのか、今でも不思議です。