判断 String[] 数组中是否包含特定字符串值?
1. Arrays.asList() + contains()
适用于无序数组,通过将数组转换为 List 后调用 contains() 方法实现。
示例:
String[] array = {"apple", "banana", "cherry"};
boolean found = Arrays.asList(array).contains("banana"); // true
注意:
适用于对象数组(如 String[]),不支持基本类型数组(需转换为包装类), 若需处理基本类型数组(如 int[]),需先转换为包装类数组(如 Integer[])。
2. Stream API 的 anyMatch()
适用于 Java 8+,通过流式操作检查数组中是否存在匹配元素。
String[] array = {"apple", "banana", "cherry"};
boolean found = Arrays.stream(array).anyMatch(s -> s.equals("banana")); // true
注意:
需导入 java.util.Arrays 和 java.util.stream.Stream
对于基本类型数组(如 int[]),使用 IntStream:
int[] intArray = {1, 2, 3};
boolean found = IntStream.of(intArray).anyMatch(i -> i == 2); // true
3. Arrays.binarySearch()
适用于 有序数组,通过二分查找提高效率。
优点:
时间复杂度 O(log n)
仅适用于有序数组
示例:
String[] array = {"apple", "banana", "cherry"}; // 必须有序
int index = Arrays.binarySearch(array, "banana");
boolean found = index >= 0; // true
注意:
若数组未排序,结果不可靠
返回值为元素索引(>=0 表示存在,<0 表示不存在)
4. 手动遍历
适用于 无序数组,通过循环逐个比较元素。
优点:
简单直观
无需额外依赖
String[] array = {"apple", "banana", "cherry"};
boolean found = false;
for (String s : array) {
if (s.equals("banana")) {
found = true;
break;
}
}
注意:
时间复杂度 O(n)
适用于不支持流式操作的旧版 Java
总结
| 方法 | 适用场景 | 优点 | 缺点 |
| Arrays.asList().contains() | 无序数组(对象类型) | 简洁高效 | 不支持基本类型数组 |
| Stream.anyMatch() | 无序数组(Java 8+) | 代码简洁 | 需导入流式API |
| Arrays.binarySearch() | 有序数组 | 高效(O(log n)) | 仅适用于有序数组 |
| 手动遍历 | 无序数组(任意类型) | 简单直观 | 时间复杂度 O(n) |
推荐方案:
- 对象数组:优先使用 Arrays.asList().contains() 或 Stream.anyMatch()。
- 基本类型数组:使用 Stream.of() 或 IntStream.of()。
- 有序数组:使用 Arrays.binarySearch()。
注意事项
大小写敏感:contains() 和 equals() 默认区分大小写。
空字符串:任何数组都包含空字符串 ""。
性能:对于大规模数据,Stream API 通常比手动遍历更高效。
1054

被折叠的 条评论
为什么被折叠?



