Javaの配列に特定の値が含まれているかどうかを確認する方法はありますか?
Javaの配列に特定の値が含まれているかを確認する方法はどのようにするのか?
Javaの配列が特定の値を含んでいるかどうかを確認する方法はいくつかあります。
- Simple iteration using for loop
- List contains() method
- Stream anyMatch() method
- Arrays binarySearch() for sorted array
一つずつこれらの方法を調べてみましょう。 (Hitotsu zutsu korera no hōhō o shirabete mimashou.)
1. フォーループを使用している。 (Fō rūpu o shiyō shite iru.)
これは、配列が特定の値を含んでいるかどうかをチェックする最も簡単で便利な方法です。forループを使用して配列の要素を確認し、equals()メソッドを使って配列の要素と与えられた値が等しいかどうかを確認します。
String[] vowels = { "A", "I", "E", "O", "U" };
// using simple iteration over the array elements
for (String s : vowels) {
if ("E".equals(s)) {
System.out.println("E found in the vowels list.");
}
}
2. Listのcontains()メソッドを使用する。
私たちは、配列のリスト表現を得るためにArraysクラスを使用できます。その後、contains()メソッドを使用して、配列が値を含んでいるかどうかをチェックします。実際のコードスニペットを実行するためにJShellを使用しましょう。
jshell> String[] vowels = { "A", "I", "E", "O", "U" };
vowels ==> String[5] { "A", "I", "E", "O", "U" }
jshell> List vowelsList = Arrays.asList(vowels);
vowelsList ==> [A, I, E, O, U]
jshell> vowelsList.contains("U")
$3 ==> true
jshell> vowelsList.contains("X")
$4 ==> false
3. StreamのanyMatch()メソッドを使用する。
もしJava 8以上を使用している場合は、配列からストリームを作成することができます。その後、anyMatch()メソッドを使用して、ラムダ式で指定した値が含まれているかをチェックできます。
jshell> List vowelsList = Arrays.asList(vowels);
vowelsList ==> [A, I, E, O, U]
jshell> Arrays.stream(vowels).anyMatch("O"::equals);
$5 ==> true
jshell> Arrays.stream(vowels).anyMatch("X"::equals);
$6 ==> false
4. ソート済み配列に対する配列のbinarySearch()
もし配列がソートされている場合、ArraysのbinarySearch()メソッドを使用して、配列が指定した値を含むかどうかを確認することができます。
String[] vowels = { "A", "I", "E", "O", "U" };
System.out.println("Unsorted Array = " + Arrays.toString(vowels));
Arrays.parallelSort(vowels);
System.out.println("Sorted Array = " + Arrays.toString(vowels));
int index = Arrays.binarySearch(vowels, "X");
if (index < 0) {
System.out.println("X not found in the array");
} else {
System.out.println("X found in the array");
}
出力:
Unsorted Array = [A, I, E, O, U]
Sorted Array = [A, E, I, O, U]
X not found in the array
配列に複数の値が含まれているかを確認する。
もし、配列が複数の値を含んでいるかどうかをチェックしたい場合はどうでしょうか。例えば、与えられた配列がソースの配列の部分集合であるかどうかを確認したいとします。ネストされたループを作成し、要素を1つずつチェックすることで確認することができます。しかし、配列をリストに変換し、containsAll()メソッドを使用することで、よりスマートな方法があります。
String[] vowels = { "A", "I", "E", "O", "U" };
String[] subset = { "E", "U" };
boolean foundAll = Arrays.asList(vowels).containsAll(Arrays.asList(subset));
System.out.println("vowels contains all the elements in subset = " + foundAll);
出力:「母音には部分集合のすべての要素が含まれています」となります。
参考文献
-
- 配列のbinarySearch() APIドキュメント
- ストリームのanyMatch() APIドキュメント