1

私は Java でリアルタイム アプリケーションを使用する作業を行っています。次のようなデータ構造があります。

HashMap<Integer, Object> myMap;

今では、これは必要なデータを保存するのに非常にうまく機能しますが、データを取り出すときに私を殺します. 私が遭遇する根本的な問題は、私が呼び出す場合

Collection<Object> myObjects = myMap.values();
Iterator<object> it = myObjects.iterator();
while(it.hasNext(){ object o = it.next(); }

クラスで反復子とコレクションを変数として宣言し、反復ごとに割り当てますが、コレクションの反復処理が非常に遅くなります。これはリアルタイム アプリケーションであるため、1 秒あたり少なくとも 25 回繰り返す必要があります。

プロファイラーを見ると、更新ごとにイテレーターの新しいインスタンスが作成されていることがわかります。

問題を解決するためにハッシュマップを変更する可能性のある2つの方法を考えていました。1. イテレータを何らかの方法でキャッシュしますが、それが可能かどうかはわかりません。2. hashmap.values() の戻り値の型を、コレクションではなくリストを返すように変更する可能性があります。 3. 別のデータ構造を使用しますが、何を使用できるかわかりません。

4

1 に答える 1

0

これがまだ開いている場合は、Google Guava コレクションを使用してください。定義している構造の multiMap のようなものがあります。わかりました、これらは正確な置き換えではないかもしれませんが、近いです: ここのウェブサイトから: https://code.google.com/p/guava-libraries/wiki/NewCollectionTypesExplained

経験豊富なすべての Java プログラマーは、いずれかの時点で Map> または Map> を実装し、その構造の厄介さに対処したことがあります。たとえば、Map> は、ラベルのない有向グラフを表す典型的な方法です。Guava の Multimap フレームワークを使用すると、キーから複数の値へのマッピングを簡単に処理できます。マルチマップは、キーを任意の数の値に関連付ける一般的な方法です。

于 2013-03-15T21:23:08.717 に答える