Listに特定の値が存在するかを高速に確認する

List等に特定の値が存在するかを高速に確認する

変化しない一覧を保持して存在有無をチェックするような場合、HashMap#containsKey()(HashSet#contains())を使う


【例:定数として利用する場合】

   /** 名称 */
   private static final HashSet names = new HashSet (
       Arrays.asList("あああ", "いいい", "ううう", "えええ")
   );

   /**
    * 名称が存在したら true を返す。無ければ false
    * @param val
    */
   private boolean containsName(String val) {
       return names.contains(val);
   }

  • 同様に、SQL等で名称のみを取得したリストやメモリ展開がされているリストの中に、特定の値が存在するかを確認する場合にも利用できる。
  • 上記の例と同様に java.util.HashSet に格納し、contains() メソッドで有無を確認する。

【メモ】
  • 1~2件程度であれば java.util.ArrayList#contains()でも性能的にも問題は無いが、件数が増えるにつれ高速化が効果を発揮する。
  • forループ等で回して有ったらbreakして……等と書くよりはちょっとカッコイイ(かも)
  • 詳細は参考リンクの『contains()の速度』を参照。


【参考リンク】

名前:
コメント:
最終更新:2012年07月06日 15:36
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。