Hatena::ブログ(Diary)

Kazzzの日記 このページをアンテナに追加 RSSフィード

2014-07-26

[][]Collection.disjoint

最近とんとご無沙汰だが、日々これ忙しく、特に現在は開発中のサービスに対して

「1週間に一度は新機能デプロイする」

という目標を掲げているので、日記を書いている時間が全く取れない。(全て一人で開発している)
今まで当日記を購読して頂いている方には大変申し訳なく心苦しいのだが、時間がとれるようになったら、また昔のように、更新したいと思っているのだが。

さて、表題の件だが、現在作っているGAE/Javeアプリケーションで、利用者メールを送るか否かの判定で

セットAの要素中にセットBの要素が一つでも含まれているか

という条件の判定が必要になっている。

ループで回せば簡単な話なのだが、

for (Object elementB : collectionB) {
    if ( collectionA.contains(elementB) ) {
        //OK
        break; //一つでも合致すればループ継続の必要なし
    }
}

なにか負けた感じがする。 JavaのCollection Frameworkで使えるメソッドが無いか調べてみた所、そのもの自体は無いが、Collection.disjointメソッドが素集合つまり互いに素であることを検査するメソッドがあるので、このメソッドの戻り値が偽であれば良さそうだ。

if (!Collections.disjoint(collectionA, collectionB) ) {
    //OK
}

結果は同じになりそうだが、大量のデータを扱う場合問題は性能。 disjointがショートカットしていない場合単純なループよりも遅くなる可能性があるのでテストが必要だろう。

ところで素集合の否定ってベン図ではどう書くんだろう?

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/Kazzz/20140726/p1
リンク元