29

オブジェクトのセットがあります。各オブジェクトには文字列値があります。

this「方向」に等しい値を持つすべてのオブジェクトを選択する必要があります。

セットを反復せずに可能ですか?

4

7 に答える 7

30

一般的に、いいえ。セットを反復処理し、各オブジェクトをチェックして、プロパティが検索している値と等しいかどうかを確認する必要があります。これはO(n)操作です。

反復せずに実行できる状況が 1 つあります。オブジェクトのメソッドがそのプロパティequalsの等価性に関して定義されており、メソッドも正しく実装されている場合、 を使用して、セットを反復処理することなく、正しい値を持つオブジェクトを時間内に見つけることができます。StringhashCodehashSet.containsO(1)

前述したように、これは非常に特殊な使用例であり、一般的な解決策ではありません。文字列が何らかの一意の識別子である場合は便利かもしれませんが、特定のユース ケースでは機能しません。

ユースケースにより適した他のコレクションを検討することもできます。たとえば、Guava を使用している場合は、 Multimapの使用を検討できます。

関連している

于 2012-10-16T07:50:51.250 に答える
4

Predicateこの質問のようにリストをフィルタリングすることもできます: What is the best way to filter a Java Collection?

于 2012-10-16T07:52:09.490 に答える