-1

オブジェクトを含むハッシュ マップがあり、特定の最大値 (別のメソッドで計算) を持つ 3 つのオブジェクトを返すメソッドを記述する必要があります。使用する最も効率的なデータ構造を探しています。

私が必要としているのは、3 つの並べ替えられた値を保持できるデータ構造です。その要素のいずれよりも大きい値を追加するたびに、最小の値がプッシュされ、新しい値が適切なインデックスに入れられます。

私が説明したものに似たものはありますか、またはこのデータを保存するために新しいオブジェクトを作成する必要がありますか?

4

1 に答える 1

0

標準ライブラリにはそのようなものはないようです。

しかし、自分で行うのはとても簡単です!サイズが 4 の配列を作成するだけです。次に、それに値を追加します。3 つの値があり、4 番目の値を追加しようとしている場合は、それを 4 番目として追加し、リストを並べ替えます。別の値を追加するたびに、4 番目の値を上書きして、もう一度並べ替えます。

これは、アイデアを提供する非常に短いスクリプトの例です。

import java.util.Arrays;

public class TempTest {

    static int[] topThree = new int[4];

    static public void addValue(int newVal) {
        if (newVal > topThree[0]) {
            topThree[0] = newVal;
            Arrays.sort(topThree);
        }
    }

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            int newInt = (int) (Math.random() * 30);
            System.out.println("Adding " + newInt);
            addValue(newInt);
            System.out.println(Arrays.toString(topThree));
        }
    }
}

この出力の結果:

Adding 23
[0, 0, 0, 23]
Adding 16
[0, 0, 16, 23]
Adding 2
[0, 2, 16, 23]
Adding 8
[2, 8, 16, 23]
Adding 28
[8, 16, 23, 28]
Adding 12
[12, 16, 23, 28]
Adding 0
[12, 16, 23, 28]
Adding 29
[16, 23, 28, 29]
Adding 6
[16, 23, 28, 29]
Adding 5
[16, 23, 28, 29]
于 2013-08-24T04:57:52.200 に答える