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

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
参考文献
- Arrays的binarySearch() API文档
- Stream的anyMatch() API文档