1

テキストファイルから複数のデータフィールド(3つの文字列フィールド、2つのintフィールド)を持つオブジェクトを取り込んで、特定の数値を計算します。次に、それらを1つずつデータ構造に配置する必要があります。それらをファイルから入力します。解析/計算/保存が終了するまでに、構造をその計算値で並べ替えて、最高値を継続的に取得/ポップできるようにする必要があります。

PriorityQueueを考えていますが、これに適した構造はありますか?

編集:何が速いでしょうか?プログラムフローの期間中、並べ替えられるように維持する構造を持っていますか、それとも単にリストに入れて最後に並べ替えるだけですか?

4

5 に答える 5

1

あなたが提案するように、私はPriorityQueueを使用します。データ構造としてヒープを使用し、要素の並べ替えを維持します。終了すると、基本的に順序付きリストが作成されるため、要素を順番に効率的に読み取ることができます。

于 2013-03-17T17:20:02.717 に答える
0

自然順をお探しの場合は、を選択できますTreeSet。ここで、要素は自然順序付けを使用して、または設定された作成時に提供されるコンパレータによって順序付けられます。

于 2013-03-17T17:16:10.417 に答える
0

数値が計算され、要素オブジェクト内に変数として格納されている場合、PriorityQueueはより適切です。その場合、適切なコンパレータを指定する必要があるかもしれません。同期アクセスの場合は、PriorityBlockingQueueに移動します。

于 2013-03-17T17:20:29.613 に答える
0

私があなたを正しく理解しているなら、あなたは値を読んで計算し、それをキューに入れて、それからあなたはキューをソートする必要がありますか?(ファイルからすべてのデータを読み取った後)キューを1回だけソートする場合は、LinkedListキューを実装するを使用することをお勧めします。

  • (i)データを読み取り、オブジェクトを作成します(実装する必要がありますCompareTo
  • (ii)すべてのオブジェクトLinkedListlinkedList.add(myObject)
  • (iii)リンクリストを並べ替える Collections.sort(linkedList)
  • (iv)最初の要素をのぞくまたはポップする
于 2013-03-17T17:27:55.923 に答える
-1

それぞれがオブジェクトである場合、2つのオブジェクトを比較してどちらを最初にするかを決定するメソッドcompateToを作成し、それを使用してオブジェクトを並べ替えることはできません(おそらく配列またはリストに格納されていますか?)。

私はあなたが多分これを調べるべきだと思います:比較してください

于 2013-03-17T17:17:03.593 に答える