15

私は2セット持っています。(Guava HashMultimap.values() から)。2 つのセットの交点が空でないセットであるかどうかをすばやく見つける必要があります。共通の要素があれば、共通の要素について知る必要はありません。Sets.intersection を使おうと思っていたのですが、o(m+n) ですので、交差点全体を作成しなくても共通要素が見つかれば解決できます (set.intersection(set2).any() のようなもの)。(データセットは非常に大きく、この操作はループ内で発生するため、パフォーマンスが最も重要です。)

どんな提案でも大歓迎です。ありがとうございました。

4

2 に答える 2

34

通常のJDKでは、これはただ

!Collections.disjoint(set1, set2)

共通の要素が見つかった場合、これはすぐに無効になります。

(ただし、価値のあることSets.intersectionですが、あなたが思っているよりも怠惰です。一定の時間でビューを返し、そのisEmpty()メソッドも共通の最初の要素を見つけるとすぐに失敗するため、同じくらい効率的です。)

于 2013-09-17T17:26:59.120 に答える
4

Collection#retainAll()を使用できます。

指定されたコレクションに含まれるこのコレクションの要素のみを保持します (オプションの操作)。つまり、指定されたコレクションに含まれていないすべての要素をこのコレクションから削除します。

于 2013-09-17T17:23:13.257 に答える