Java数组检查元素存在性的5种高效方法(2023教程)

如何检查Java数组中是否包含某个值?

有很多方法可以检查一个Java数组是否包含特定的值。

  • 使用for循环进行简单迭代
  • 使用List的contains()方法
  • 使用Stream的anyMatch()方法
  • 使用Arrays的binarySearch()方法(适用于已排序数组)

让我们一次性逐个研究所有这些方法。

使用for循环

这是最简单方便的方法来检查数组是否包含特定值。我们将使用for循环遍历数组元素,并使用equals()方法检查数组元素是否等于给定值。

String[] vowels = { "A", "I", "E", "O", "U" };

// 使用简单迭代遍历数组元素
for (String s : vowels) {
	if ("E".equals(s)) {
		System.out.println("在元音列表中找到了E。");
	}
}

2. 使用列表的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
Java数组包含值

3. 使用流的anyMatch()方法

如果您使用的是Java 8或更高版本,您可以从数组中创建一个流。然后使用带有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("未排序数组 = " + Arrays.toString(vowels));

Arrays.parallelSort(vowels);

System.out.println("已排序数组 = " + Arrays.toString(vowels));

int index = Arrays.binarySearch(vowels, "X");

if (index < 0) {
	System.out.println("在数组中未找到X");
} else {
	System.out.println("在数组中找到了X");
}

输出:

未排序数组 = [A, I, E, O, U]
已排序数组 = [A, E, I, O, U]
在数组中未找到X

检查数组是否包含多个值

如果我们想要检查数组是否包含多个值,怎么办?假设你想要检查给定的数组是否是源数组的子集。我们可以创建嵌套循环,并逐个检查每个元素。有一种更简洁的方法是将数组转换为列表,然后使用containsAll()方法进行检查。

String[] vowels = { "A", "I", "E", "O", "U" };
String[] subset = { "E", "U" };

boolean foundAll = Arrays.asList(vowels).containsAll(Arrays.asList(subset));

System.out.println("元音数组包含子集中的所有元素 = " + foundAll);

输出:元音数组包含子集中的所有元素 = true

参考文献

  1. Arrays的binarySearch() API文档
  2. Stream的anyMatch() API文档
bannerAds