0

問題文があり、Java でそれを解決する最善の方法を知りたいです。

多数のレコード (100 万と言う) があり、レコードにはタイムスタンプと値があります。最高値である15分ごとのスパンのように出力を取得する必要があります。

E.g.
Timestamp
-07-10-2013 10.15 - 14
-07-10-2013 10.18 - 13
-07-10-2013 10.19 - 18
-07-10-2013 10.30 - 16
-07-10-2013 10.34 - 10
-07-10-2013 10.38 - 17
-07-10-2013 10.42 - 30
-07-10-2013 10.54 - 23
-07-10-2013 10.57 - 44

出力

-07-10-2013 10.19 - 18
-07-10-2013 10.42 - 30
-07-10-2013 10.57 - 44

Javaでそれを行う最良の方法は何ですか。各レコードを繰り返し処理するのは面倒に見えます。どんな助けでも素晴らしいでしょう。

4

5 に答える 5

0

最適化に使用できる事前定義された順序がない限り、各値を反復せずに最大値を取得することはできません。

Map を使用して最大値を蓄積し、以前に保存した値と比較して、レコードを 1 回繰り返して最大値を取得できるようにします。

于 2013-10-07T05:35:33.637 に答える
0

クラスのコンパレータを作成します。オブジェクトを TreeSet に格納します。TreeSet.descendingIterator を使用して、最高のタイムスタンプを持つ n 個のオブジェクトを表示します。

このソリューションは、タイムスタンプが一意であることが保証されている場合にのみ有効であることに注意してください。それ以外の場合は、PriorityQueue を使用します。

于 2013-10-07T05:37:47.383 に答える
0

Comparator を作成して使用する

Collections.sort(list, Collections.reverseOrder(yourComparator));

常にリストから最初の要素を取得します。

于 2013-10-07T05:51:37.847 に答える
0

TreeSetをお勧めします。ツリーセットはソート可能で、必要なものをナビゲートできます。コンパレータを使用することを忘れないでください。これは、最小、最大、ソートを識別するために使用される比較機能を提供します。

于 2013-10-07T05:53:34.863 に答える
0

最大値のみが必要な場合は、リスト全体を並べ替える必要はありません。代わりにバブル ソートを使用すると、1 回の反復で最高値が得られます (複雑さは O(n))。TreeSet と Collections.sort は、コレクション全体をソートしようとするため、非常に高価であることに注意してください。これは、あなたのケースでは必要ありません。

于 2013-10-07T05:57:46.437 に答える