配列 - Javaのセットに「any contains」のようなものがありますか?




オブジェクト 複数 (9)

私はセットAからHashMapを作成し、セットBを反復し、Bの要素がAであるかどうかを確認することをお勧めします。これはO(|A|+|B|)時間で実行されますO(|A|+|B|)衝突がないので) retainAll(Collection<?> c)O(|A|*|B|)時間で実行する必要があります。

私は同じタイプの2つのセットAとBを持っています。

AにセットBの要素が含まれているかどうかを調べる必要があります。

セットを反復することなくそれを行う最善の方法は何でしょうか? Setライブラリにはcontains(object)containsAll(collection)containsAny(collection)containsAny(collection)が、 containsAny(collection)containsAny(collection)いません。


retainAllメソッドを使用して、2つのセットの共通部分を取得できます。



SetインタフェースではretainAll()を使用します。 このメソッドは、両方のセットで共通の要素の共通部分を提供します。 詳細については、APIドキュメントを参照してください。


containsAnyをセットに実装する良い方法は、Guava Sets.intersection()を使用することです。

containsAnybooleanを返すので、呼び出しは次のようになります。

Sets.intersection(set1, set2).isEmpty()

セットが互いに素である場合はtrueを返し、そうでない場合はfalseを返します。 この時間の複雑さは、元のセットを変更しないようにクローンを行う必要がないので、retainAllよりも若干優れています。


Java 8以降: setA.stream().anyMatch(setB::contains)


Collections.disjoint(A, B)動作しませんか? ドキュメントから:

指定された2つのコレクションに共通の要素がない場合はtrue返します。

したがって、コレクションに共通の要素が含まれている場合、このメソッドはfalse返します。


私はorg.apache.commons.collections.CollectionUtilsを使用します

CollectionUtils.containsAny(someCollection1, someCollection2)

それはすべてです! 少なくとも1つの要素が両方のコレクションにある場合はtrueを返します。

使い方が簡単で、関数の名前が示唆的です。


しばしば私は、実際の類推を生み出すことによって可能になった言語の基本概念を覚えていることを認識しました。Javaのアクセス修飾子を理解するための私の類推は次のとおりです。

あなたは大学の学生で、週末にあなたを訪ねる友人がいるとしましょう。大学の創設者の大きな像がキャンパスの中央にあるとします。

  • 彼をキャンパスに連れて行くと、あなたとあなたの友人が最初に気がついたのはこの像です。つまり、キャンパス内を歩く人は、大学の許可なく像を見ることができます。この像はPUBLICになります。

  • 次に、あなたはあなたの寮にあなたの友人を連れて行きたいですが、そのためには彼を訪問者として登録する必要があります。つまり、キャンパス内のさまざまな建物に入るためにアクセスパス(あなたと同じ)を取得します。これは彼のアクセスカードを保護されたものにするでしょう。

  • あなたの友人はキャンパスWiFiにログインしたいが、それを行うための資格はありません。彼がオンラインになる唯一の方法は、彼とあなたのログインを共有することです。(大学に行く学生はすべて、これらのログイン資格情報も持っていることに注意してください)。これにより、あなたのログイン情報がNO MODIFIERになります。

  • 最後に、あなたの友人はウェブサイトに掲載されている学期の進捗報告書を読みたいと思っています。ただし、キャンパスのWebサイトのこのセクションにアクセスするには、すべての生徒がログインしてください。これにより、これらの資格情報がPRIVATEになります。

お役に立てれば!





java