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


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

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()の速度』を参照。


【参考リンク】

名前:
コメント:
ツールボックス

下から選んでください:

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