在 Java 中检查数组是否包含特定值
数组是按一定顺序排列的元素的系统集合。在内部,数组元素存储在连续的内存位置。
有多种方法可以搜索数组中的元素。不同的方法导致不同的时间和复杂性。下面列出了几种在数组中搜索元素的方法。
使用 Java 中的 array.contains()
方法检查数组是否包含特定值
在下面的代码块中,我们需要用一些预定义的值实例化一个数组 arr
。现在,初始化我们要搜索的字符串。
Arrays
是一个具有各种操作数组方法的类。此类包含静态工厂方法和字段,它们在搜索和排序数组中的元素时非常有用。
asList()
方法是 Arrays
类的静态方法。它返回从参数中获取的指定数组的固定列表。
contains()
是 List
接口中的一个方法。它接受一个元素作为参数,我们将这个参数与列表中存在的元素进行比较。如果指定的元素存在于列表中,则返回布尔值 true
,在任何一种情况下都返回 false
。如果指定元素的类型与此列表不兼容,则该方法抛出 ClassCastException
;如果指定值为 null 且此列表不允许空值,则该方法抛出 NullPointerException
。
package findInList;
import java.util.Arrays;
public class FindAValueInArray {
public static void main(String[] args) {
String[] arr = new String[] {"1", "2", "3"};
String stringToSearch = "2";
System.out.println(Arrays.asList(arr).contains(stringToSearch));
}
}
上述程序的输出如下。
true
使用 Java 8 流检查数组包含特定值
在上面的代码块中,前两行与第一个代码中的类似。这里我们使用了 Arrays
类的 stream
方法来创建数组流。此方法返回一个以指定数组为源的顺序流。Stream
类有一个名为 anyMatch()
的函数。该方法将谓词
作为其输入。
Predicate
是一个函数式接口,它接受一个参数函数并返回一个 Boolean
值。它包含一个 test(T t)
方法,用于评估给定参数的谓词。如果流的任何元素与提供的谓词匹配,则返回 true
,否则返回 false
值。
package findInList;
import java.util.Arrays;
public class FindAValueInArray {
public static void main(String[] args) {
String[] arr = new String[] {"1", "2", "3"};
String stringToSearch = "2";
System.out.println(Arrays.stream(arr).anyMatch(s -> s.equals(stringToSearch)));
}
}
上述代码的输出与第一个代码相同。
使用简单的 for
循环检查数组是否包含特定值
在下面的代码块中,我们使用传统的 for
循环来迭代数组。for
循环在 expression1
中初始化,计数器值为 0
。现在将计数器值与数组的长度进行比较。如果计数器变量小于定义数组的长度,则代码块内的语句将被执行。
在 for
块内,我们使用 String
类的 equals
方法比较数组的每个元素。如果状态评估为真,则使用 break
关键字来中断 for
循环的执行。如果没有找到,代码将被执行与数组中元素数量一样多的次数。
在循环之后,如果在列表中搜索到元素,则打印语句会将状态变量的值评估为真
,否则将打印 false
值。
package findInList;
public class FindAValueInArray {
public static void main(String[] args) {
String[] arr = new String[] {"1", "2", "3"};
String stringToSearch = "2";
boolean status = false;
for (int i = 0; i < arr.length; i++) {
status = arr[i].equals(stringToSearch);
if (status)
break;
}
System.out.println(status);
}
}
输出结果也与第一段代码中给出的相同。
Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.
LinkedIn