【3パターンをサンプル付きで】Java配列の検索方法

Java 配列の検索方法
  • このエントリーをはてなブックマークに追加
  • Pocket

Javaの配列内で要素を検索する方法はいくつかある。あまり大きな配列にならない限り、使いやすいものを使えばいいだろう。

このページではJava配列内の検索方法についてまとめている。参考にしていただければと思う。

配列を検索する方法

配列を検索する方法はいくつかある。プログラムのコードはクラスライブラリを使わないで書くこともできるが、Javaのクラスライブラリを使えばスマートに配列を検索できる。

では、配列を検索するために使えるJavaのクラスライブラリの使い方を紹介しよう。

検索に利用できるクラスライブラリ

ここでは、3つのクラスライブラリを紹介する。どれを使うかは、いろいろな場面に応じて使い分けることになる。

Java 標準クラスライブラリ

Java標準のライブラリの中にあるパッケージjava.util.にArraysクラスがある。そのArraysクラスに配列をListクラスのインスタンスに変換してくれるasListクラスメソッドがある。

このメソッドで配列をListに変換して、変換されたListクラスのインスタンスに対してcontainsメソッドで検索を行う。このように二段階のメソッド呼び出しだが、一行で書くこともできる。

書き方はこうだ。

boolean 結果 = Arrays.asList(配列変数名).contains(検索する値)

注意点は、配列は参照型の配列でなくてはならない。プリミティブ型は正しく動作しない。詳細は「クラスライブラリ」のセクションで説明している。

Apache Commons Lang

Apache Commons Langによって提供されるクラスライブラリがある。その中の ArrayUtilsクラスに配列を検索するcontainsクラスメソッドがある。このメソッドを使うと配列の要素を検索することができる。単純に配列を検索するだけなら、標準のクラスライブラリを使うより、このクラスライブラリを使ったほうが簡単だ。

とはいえ、準備としてクラスライブラリをダウンロードして、Javaの開発環境に取り込んでおくことが必要である。

基本的な書き方はこうだ。

boolean 結果 = ArrayUtils. contains (配列, 検索する値)

詳細は「クラスライブラリ」のセクションで説明している。

Java 8 Stream

Java 8で標準クラスライブラリに新たに追加されたjava.util.streamパッケージにStreamクラスがある。その新たなクラスにanyMatchメソッドがある。このメソッドを使うと配列の要素を検索することができる。Streamを使うために配列からStreamに変換する必要がある。しかし、一度Streamに変換すれば他のStreamの新たな機能を使うことができる。

基本的な書き方はこうだ。

boolean 結果 = Stream変数名.anyMatch(検索する値::メソッド)

詳細は「クラスライブラリ」のセクションで説明している。

Arrays.asListを使った配列内検索のサンプルプログラム

それでは実際にサンプルプログラムを確認してみよう。

このサンプルプログラムは一行と二行に分けた書き方の両方を示している。どちらを書いても動作は同じである。

実行結果

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] 配列変数 arrayを宣言し、"アップル"、"バナナ"、"メロン"を代入する。
  • [2][3] もし配列変数arrayをListに変換して、Listが"メロン"を含むならば、”一行で書いた検索:メロンが見つかった”を表示する。
  • [4] 配列変数arrayをListクラスのオブジェクトに変換し、変数listに代入する。
  • [5][6] もしlistの要素に"メロン"が含まれるならば、”二行で書いた検索:メロンが見つかった”を表示する。
  • [7] 戻る。
  • [8] メロンは見つからなかった”を表示する。

ArrayUtils. containsを使った配列内検索のサンプルプログラム

このサンプルプログラムは、検索する値と検索する対象となる配列をメソッドの引数として渡している。メソッドを呼べば検索の結果が返ってくる。

実行結果

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1]配列変数 arrayを宣言し、"アップル"、"バナナ"、"メロン"を代入する。
  • [2][3]もし配列変数arrayの配列の要素を検索して、"メロン"が含まれるならば、”メロンが見つかった”を表示する。
  • [4]戻る。
  • [5]”メロンは見つからなかった”を表示する。Streamを使ったサンプルプログラム

Streamを使った配列内検索のサンプルプログラム

このサンプルプログラムは、検索したい配列をSteamに変換して検索を行っている。

配列要素がプリミティブ型

実行結果

サンプルプログラムの説明

それでは簡単にプログラムの解説をしてゆこう。

  • [1] 配列変数 arrayを宣言し、"アップル"、"バナナ"、"メロン"を代入する。
  • [2] arrayをStreamクラスのオブジェクトに変換し、変数arrayStreamに代入する。
  • [3][4] もし配列変数arrayStreamを検索して"メロン"に一致する要素がみつかったなら、"メロンが見つかった"を表示する。
  • [5] 戻る。
  • [6] "メロンは見つからなかった"を表示する。

クラスライブラリの詳細

サンプルプログラムの中で使っているふたつのメソッドのAPI仕様を見てみよう。

Arrays.asList

asList(T... a)

戻り値の型

public static <T> List<T>

内容

指定された配列が背後にある固定サイズのリストを戻す。(戻されたリストに対する変更は、その配列にライト・スルーされる。)このメソッドは、Collection.toArray()と共同して、配列ベースのAPIs とコレクションベースAPIsとの間のブリッジの働きをする。

戻されたリストは、シリアライズ可能かつRandomAccessを実装する。このメソッドは、またいくつかの要素を含むために初期化された固定サイズのリストを生成するために便利な方法を提供する。

     List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");

 

型 引数:T - 配列の中のオブジェクトのクラス

 

引数:a -リストの背後に置かれることになる配列

 

戻り値:指定されたリストのヴュー

List.contains

a contains(Object o))

戻り値の型

boolean

内容

もしこのリストが指定された要素を含むなら、trueを戻す。もっと正確には、たとえ、このlistが少なくとも(o==null ? e==null : o.equals(e))のような1つの要素を含むだけでもtrueを戻す。

 

引数;o - このリストの中の存在がテストされるべき要素。

 

戻り値:もしこのリストが指定された要素を含むなら、trueを戻す。

 

例外:

ClassCastException -もし指定された要素の型が、このリストと適合しないならば(オプション)。

NullPointerException - もし指定された要素がnullで、このリストがnull要素を許可しないならば(オプション)。

ArrayUtils. contains

contains(Object o)

戻り値の型

Boolean

内容

もしオブジェクトが渡された配列の中にあるならば、チェックする。

もし、あるnullの配列が渡されるならば、メソッドはfalseを戻す。

 

引数:

array-検索するための配列

objectToFind-見つけるためのオブジェクト

 

戻り値:もし配列がオブジェクトを含むならば、trueを戻す。

Java 8 Stream. anyMatch

anyMatch(Predicate<? super T> predicate)

戻り値の型

Boolean

内容

このstreamのいずれかの要素が、提供されたpredicateと一致しているかどうかを戻す。結果を決定するために、もし必要でないならすべての要素についてpredicateを評価しないかもしれない。もしstreamが空ならばfalseが戻され、predicateは評価されない。

 

これは、途中で終わることがあるオペレーションである。

 

引数:predicate -このstreamの要素に適用する非干渉でステートレスなpredicate。

 

戻り値:もしstreamのいずれかの要素が提供されたpredicateと一致しているならば、trueを戻す。そうでなければfalseを戻す。

まとめ

このページではJavaでの配列内検索についてまとめてみた。配列内の検索はよく使うロジックだろう。使う時はこのページを確認して、トライしてみていただきたい。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できます。

IT講師に興味はありませんか?

・「今までIT講師をやってきたが、更に多くの講義を行いたい」

・「エンジニアとしてやってきたが講師業に魅力を感じている」

・「講師として活躍するためにベースとなる知識を知りたい」

・「様々な分野や言語の講師にチャレンジしてみたい」


という方はぜひIT講師募集のページをご覧ください。


リスキルテクノロジーでは「受講している方々にITを好きになってもらう」ことを目標に、同じ目標に向かって歩んで行ける講師の方を常に探しています。


システム開発やインフラ構築などのエンジニアリング経験を活かし、新入社員などの未経験者や経験の浅い初学者の方々に対してITトレーニングを行っていただくことになります。


テキストやカリキュラムは事前に用意されており、それらを元に講義を進めていくため、IT講師をはじめて実施する方でも安心してトレーニングを実施できます。


IT講師募集のページを見る

SNSでもご購読できます。

コメントを残す

*

未経験からの育成制度も充実
IT講師に興味はありませんか?

リスキルテクノロジーでIT講師の積極募集を開始! 経験・未経験問わずご応募可能。育成制度で講師スキル向上も目指せます

IT講師に応募する