3

HashMap何百ものComparableオブジェクト(たとえば、タイプ)を含む多数のデータ構造がMyClassあり、すべての値(キーではない)を単一のデータ構造に入れてから、それを並べ替える必要があります。

オブジェクトの量と到着率のためMyClass、この手順(少なくとも1ミリ秒に1回実行)は可能な限り効率的である必要があります。

アプローチはSortedSet、大まかに次のように使用することです。

HashMap<String, MyClass>[] allMaps = ... // All the HashMaps

SortedSet<MyClass> set = new TreeSet<MyClass>();

Collection<MyClass> c;

for (HashMap<String, MyClass> m:allMaps)
{
    c = m.values();
    set.addAll(c);
}

ソートされたコレクションをに渡す方が速い場合があります。これにより、挿入ごと、または数回の挿入ごとにset.addAll()再ソートされる場合があります。TreeSetただし、そのためには、Listに渡す必要があります。つまり、からへCollections.sort()の変換を実行する必要があります。つまり、別のパフォーマンスヒットを維持する必要があります。CollectionList

また、同じ目標を達成するための別のより効率的な方法があるかもしれません。

コメント?

4

1 に答える 1

1

答えは、MyClassデータがどのように変化するかによって多少異なると思います。たとえば、時間枠ごとにいくつかの新しい値が入ってくる場合は、最後に返された並べ替えられたセットと前のキーのコピーを保持して、次の実行で次の実行ができるようにすることを検討できます。変更のデルタ(つまり、マップで新しいキーを見つけて、前回戻ったソート済みセットに手動で挿入します)。

MyClassオブジェクトがマップから削除される可能性がある場合、このアルゴリズムは少し異なります。ただし、一般的な考え方は高速化することです。セット全体を毎回再処理するのではなく、段階的な変更を実行する方法を見つける必要があります。

于 2012-05-14T11:52:18.593 に答える