Skip to main content

如何检查 Java 数组中是否含有某特定值

作者:Pankaj

如何检查 Java 数组中是否含有某个特定值?

我们可以通过多种方法检查 Java 数组中是否含有某个特定值。

  • 使用 for 循环进行简单迭代
  • 使用 List 的 contains() 方法
  • 使用 Stream 的 anyMatch() 方法
  • 对排好序的数组使用 Array 的 binarySearch() 方法

本文的以下部分将带您一次性了解所有方法。

1. 使用 for 循环

要检查数组中是否包含某个值,最简单方便的方法就是使用 for 循环。我们将用 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(数组)类获取数组的列表(list)形式,然后使用 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

结果如下:

Jshell result

3. 使用 Stream 的 anyMatch() 方法

在 Java 8 或更新版本的 Java 中,您可以从数组中创建一个流(stream),然后通过 lambda 表达式使用 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. 对排序过的数组使用 Arrays 的 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

检查数组中是否包含给定的多个值

如果想检查数组是否包含给定的多个值,该怎么办呢?假设您要检查给定的数组是否是原数组的子集,可以创建嵌套循环,并一一检查每个元素。但还有一个更简洁的方法,是将数组转换为列表,然后使用 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);

输出:vowels contains all the elements in subset = true