0

私はペアに過ぎないクラスを持ってい(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)]

主な使用パターンは次のとおりです。

  1. クライアントはペアで入り(d, i)ます。
  2. コレクションの 1 つのヘッド (クライアントによって異なります) をチェックして、指定されたペアよりも低い(または高い)ペアを探しますd
  3. 存在する場合は、それを削除するか、 の値に基づいて計算を実行しますi
  4. 存在しない場合、または削除されていない場合は、指定されたペアを他のコレクションの適切な場所に挿入します。

したがって、主な操作は次のとおりです。

  • 順番に挿入します。
  • 頭を取得します。
  • ヘッドを取り外します。

例:

  1. クライアントは で入り、(4.2, 12)見たいと思っていますasc
  2. asc4.0よりも低いとのペアを持ってい4.2ます。
  3. 頭を外しascて新しい頭を見てください。
  4. 新しいヘッドは よりも高い4.2ので、クライアントはペアを に挿入します。desテール4.2は より低いため6.0です。

クライアントはコレクションをトラバースするのではなく、現在のヘッドを処理することを望んでおらず、挿入は順番に行われ、非常に高速である必要があるため、 aがジョブのツールであると言えます。PriorityQueue

私は正しいですか、それとも私が気付いていないJava (外部ライブラリなし) にはより良いデータ構造がありますか?

ArrayListたとえば、末尾に挿入するのではなく、ランダムなインデックスで挿入が行われるため、このタスクにはひどいように聞こえます。

4

1 に答える 1