如何检查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);