怎么有效地检查数组是否包含Java中的值
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章主要介绍怎么有效地检查数组是否包含Java中的值,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. 检查数组是否包含值的四种不同方法1) 使用List:public s
千家信息网最后更新 2025年01月18日怎么有效地检查数组是否包含Java中的值
这篇文章主要介绍怎么有效地检查数组是否包含Java中的值,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
1. 检查数组是否包含值的四种不同方法
1) 使用List
:
public static boolean useList(String[] arr, String targetValue) { return Arrays.asList(arr).contains(targetValue);}
2) 使用 Set
:
public static boolean useSet(String[] arr, String targetValue) { Set set = new HashSet(Arrays.asList(arr)); return set.contains(targetValue);}
3)使用一个简单的循环:
public static boolean useArraysBinarySearch(String[] arr, String targetValue) { int a = Arrays.binarySearch(arr, targetValue); if(a > 0) return true; elsereturn false;}
4) 使用 Arrays.binarySearch()
:
public static boolean useArraysBinarySearch(String[] arr, String targetValue) { int a = Arrays.binarySearch(arr, targetValue); if(a > 0) return true; elsereturn false;}
2. 时间复杂度
可以使用以下代码来测量大致的时间成本。基本思想是搜索大小为 5、1k、10k 的数组。该方法可能不精确,但其思想清晰而简单。
public static void main(String[] args) { String[] arr = new String[] { "CD", "BC", "EF", "DE", "AB"}; //use listlong startTime = System.nanoTime(); for (int i = 0; i < 100000; i++) { useList(arr, "A"); } long endTime = System.nanoTime(); long duration = endTime - startTime; System.out.println("useList: " + duration / 1000000); //use set startTime = System.nanoTime(); for (int i = 0; i < 100000; i++) { useSet(arr, "A"); } endTime = System.nanoTime(); duration = endTime - startTime; System.out.println("useSet: " + duration / 1000000); //use loop startTime = System.nanoTime(); for (int i = 0; i < 100000; i++) { useLoop(arr, "A"); } endTime = System.nanoTime(); duration = endTime - startTime; System.out.println("useLoop: " + duration / 1000000);
结果:
useList: 13useSet: 72useLoop: 5
使用更大的数组 (1k):
String[] arr = new String[1000]; Random s = new Random();for(int i=0; i< 1000; i++){ arr[i] = String.valueOf(s.nextInt());}
结果:
useList: 112useSet: 2055useLoop: 99useArrayBinary: 12
使用更大的数组(10k):
String[] arr = new String[10000]; Random s = new Random();for(int i=0; i< 10000; i++){ arr[i] = String.valueOf(s.nextInt());}
结果:
useList: 1590useSet: 23819useLoop: 1526useArrayBinary: 12
显然,使用简单的循环方法比使用任何集合更有效。很多开发人员使用第一种方法,但效率低下。将数组推送到另一个集合需要在对集合类型执行任何操作之前遍历所有元素以读取它们。
如果使用 Arrays.binarySearch() 方法,则必须对数组进行排序。在这种情况下,数组未排序,因此不应使用它。
实际上,如果您需要有效地检查某个值是否包含在某个数组/集合中,排序列表或树可以在 O(log(n)) 中完成,或者 hashset 可以在 O(1) 中完成。
以上是"怎么有效地检查数组是否包含Java中的值"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
数组
方法
有效
检查
结果
排序
内容
思想
时间
篇文章
循环
不同
低下
复杂
精确
人员
代码
价值
元素
兴趣
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
多媒体数据库面向对象
xp 代理服务器设置
计算机网络技术就业方向和待遇
《网络安全法》主要任务是
丽水品牌网络技术市场价格
apex英雄服务器为什么这么差
卡桑德拉 数据库
人才可视化数据库
db2 创建数据库
和平精英怎么设置外服的服务器
网络技术子健
ssh 代理服务器
我的世界服务器招人管理员
日照商城软件开发
软件开发工程师创业
淄博嵌入式软件开发公司
数据库多属性使用二进制
重庆市香樟树软件开发
gis数据库的建立与入库
德惠先进网络技术参考价格
数据库隐藏后无法显示
金山区品牌软件开发厂家价格
软件开发方向的简历
医邦网络技术有限公司怎么样
db2 创建数据库
忻州市委网络安全宣传
全球多少个根域名服务器
许昌智启网络技术有限公司
数据库应用判断题
思迅怎么查服务器ip