3

基本的に、大量のオブジェクトのデータ構造があり、この構造は複数のスレッドからアクセスされるため、それを考慮する必要があります。

多くの反復とオブジェクト操作を常に実行する必要があります (各メイン ループの反復により、最悪の場合はデータ構造内のすべてのオブジェクトが変更され、最良/通常の場合は何も変更されない可能性があります)。

現在、私はCopyOnWriteArrayList自分の構造として a を使用しています。さらに、繰り返しのたびに、リストのサイズを抑えるために、重複を追加しないようにしています。

これらの操作のためにスレッドを保持することを避けたいので、locks/synchronized の使用は理想的ではありません。

私が知る限り、これに対する私のオプションは次のとおりです。

  1. contains()追加する各要素のチェックを実行します
  2. リストからa を作成し、HashSet元に戻します (基本的にすべての重複を削除します) 。
  3. ConcurrentHashMapデータ構造にはリストの代わりに a を使用します
  4. 他の何か?

ArrayListsオブジェクト操作と重複チェックは厳密にa HashMap. 私の場合は両方が必要になるため、ここで最善の解決策は何かと考えています。

また、要素の順序は問題ではないことにも言及する必要があります。

編集:これをさらに明確にするために、コレクションには要素が常に追加、削除、および変更されます。どの程度までは特定の実行時間 (通常はランダムなイベントに基づく) に依存するため、どのくらいの頻度で発生するかについての仮定には注意が必要です。発生が保証されている唯一のことは、各要素に対して複数のチェックを実行して、コレクションが毎回完全に繰り返されることです。

4

1 に答える 1

1

この回答は、同時実行に関する懸念に対処します。

多くの反復とオブジェクト操作を常に実行する必要があります (メイン ループの反復ごとに、最悪の場合はデータ構造内のすべてのオブジェクトが変更され、最良/通常の場合は何も変更されない可能性があります)。

コレクションは変更されますか? どのコレクションが最も理にかなっているかを選択するだけでなく、オブジェクトを同期します。それらがコレクション内に入ると、CopyOnWriteArraylistまたはからの同期の利点は得られませんConcurrentHashMap

コレクションが変更される場合、フォローアップはどのくらいの頻度で行われますか?

多くの場合、CopyOnWriteArrayList を使用しません。少ない場合は、最高の検索パフォーマンスに基づいて選択します。

于 2014-11-21T22:04:12.207 に答える