Java String[] 数组的 contains

判断 String\[\] 数组中是否包含特定字符串值?

  1. ‌Arrays.asList() + contains()‌

适用于无序数组‌,通过将数组转换为 List 后调用 contains() 方法实现。

‌示例‌:

String\[\] array = {"apple", "banana", "cherry"};

boolean found = Arrays.asList(array).contains("banana"); // true

注意‌:

适用于对象数组(如 String\[\]),不支持基本类型数组(需转换为包装类), 若需处理基本类型数组(如 int\[\]),需先转换为包装类数组(如 Integer\[\])。

  1. ‌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

  1. ‌Arrays.binarySearch()‌

适用于 ‌有序数组‌,通过二分查找提高效率。

优点‌:

时间复杂度 O(log n)

仅适用于有序数组

‌示例‌:

String\[\] array = {"apple", "banana", "cherry"}; // 必须有序

int index = Arrays.binarySearch(array, "banana");

boolean found = index >= 0; // true

注意‌:

若数组未排序,结果不可靠

返回值为元素索引(>=0 表示存在,<0 表示不存在)

  1. ‌手动遍历‌

适用于 ‌无序数组‌,通过循环逐个比较元素。

优点‌:

简单直观

无需额外依赖

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 通常比手动遍历更高效。

相关推荐
CoderYanger6 分钟前
A.每日一题:856. 括号的分数
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
liangbo723 分钟前
01-Java 集合框架全景:从 Collection 到 Map 一张关系网理清
java
xuxigifxfh26 分钟前
HJ15 求int型正整数在内存中存储时1的个数
java·开发语言·华为机考
Wokoo730 分钟前
自动化测试入门:核心场景、回归测试与 Web 自动化环境搭建
java·开发语言·测试工具
tachibana232 分钟前
Golang 中数组和切片的区别?
开发语言·后端·golang·数组·切片
我是人✓1 小时前
Spring IOC注解全解析和Spring整合测试单元
java·后端·spring
郭庆汝1 小时前
windows本地部署AgentDesk
windows
智购科技无人售货机工厂店1 小时前
玻璃瓶饮料破损率突然上升,排查发现是取货口缓冲垫老化了~YH
java·开发语言·人工智能·python·eclipse
笨笨D幸福1 小时前
win11 vhdx/wtg 安装出现问题,提示 Windows 安装程序无法将 Windows 配置为在此计算机的硬件上运行
windows
镜象科技1 小时前
中小学AI心理健康解决方案服务商怎么选?2026年选型参考
android·java·人工智能