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

时间:2020-02-23 14:36:21  来源:igfitidea点击:

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

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

  • 使用for循环的简单迭代
  • 列出contains()方法
  • 流anyMatch()方法
  • 数组binarySearch()用于排序的数组

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

1.使用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类来获取数组的列表表示形式。
然后使用contains()方法检查数组是否包含该值。
让我们使用JShell来运行示例代码段。

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

jshell> List<String> vowelsList = Arrays.asList(vowels);
vowelsList ==> [A, I, E, O, U]

jshell> vowelsList.contains("U")
 ==> true

jshell> vowelsList.contains("X")
 ==> false

3.使用Stream anyMatch()方法

如果使用Java 8或者更高版本,则可以从数组创建流。
然后使用带有lambda表达式的anyMatch()方法来检查它是否包含给定值。

jshell> List<String> vowelsList = Arrays.asList(vowels);
vowelsList ==> [A, I, E, O, U]

jshell> Arrays.stream(vowels).anyMatch("O"::equals);
 ==> true

jshell> Arrays.stream(vowels).anyMatch("X"::equals);
 ==> 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

检查数组是否包含多个值

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