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 に値を挿入してから、その頻度を更新していました。しかし、この間違いにもかかわらず、注文はコンパレーターにとって完璧であり、-1 と 1s の値を交換したときにのみ混同され、コンパレーターに何か問題があると信じるようになったため、混乱しました。どうして完璧だったのか、今でも不思議です。

4

0 に答える 0