私はペアに過ぎないクラスを持ってい(double, int)
ます。これらのオブジェクトの 2 つのコレクションを保持する必要があります。どちらも でソートされdouble
、1 つは昇順、もう 1 つは降順です。
例:
asc: [(4.0, 10), (4.5, 8), (5.2, 13), (6.0, 1)]
des: [(32.0, 20), (27.5, 2), (13.65, 4), (6.0, 100)]
主な使用パターンは次のとおりです。
- クライアントはペアで入り
(d, i)
ます。 - コレクションの 1 つのヘッド (クライアントによって異なります) をチェックして、指定されたペアよりも低い(または高い)ペアを探します
d
。 - 存在する場合は、それを削除するか、 の値に基づいて計算を実行します
i
。 - 存在しない場合、または削除されていない場合は、指定されたペアを他のコレクションの適切な場所に挿入します。
したがって、主な操作は次のとおりです。
- 順番に挿入します。
- 頭を取得します。
- ヘッドを取り外します。
例:
- クライアントは で入り、
(4.2, 12)
見たいと思っていますasc
。 asc
4.0
よりも低いとのペアを持ってい4.2
ます。- 頭を外し
asc
て新しい頭を見てください。 - 新しいヘッドは よりも高い
4.2
ので、クライアントはペアを に挿入します。des
テール4.2
は より低いため6.0
です。
クライアントはコレクションをトラバースするのではなく、現在のヘッドを処理することを望んでおらず、挿入は順番に行われ、非常に高速である必要があるため、 aがジョブのツールであると言えます。PriorityQueue
私は正しいですか、それとも私が気付いていないJava (外部ライブラリなし) にはより良いデータ構造がありますか?
ArrayList
たとえば、末尾に挿入するのではなく、ランダムなインデックスで挿入が行われるため、このタスクにはひどいように聞こえます。