当前位置: 首页 > news >正文

西安做营销型网站烟台网架公司

西安做营销型网站,烟台网架公司,wordpress门户论坛,wordpress控制台地址转载自 在Java中如何高效的判断数组中是否包含某个元素如何检查一个数组(无序)是否包含一个特定的值#xff1f;这是一个在Java中经常用到的并且非常有用的操作。同时#xff0c;这个问题在Stack Overflow中也是一个非常热门的问题。在投票比较高的几个答案中给出了几种不同的…转载自 在Java中如何高效的判断数组中是否包含某个元素如何检查一个数组(无序)是否包含一个特定的值这是一个在Java中经常用到的并且非常有用的操作。同时这个问题在Stack Overflow中也是一个非常热门的问题。在投票比较高的几个答案中给出了几种不同的方法但是他们的时间复杂度也是各不相同的。本文将分析几种常见用法及其时间成本。 检查数组是否包含某个值的方法 使用List public static boolean useList(String[] arr, String targetValue) {return Arrays.asList(arr).contains(targetValue); } 使用Set public static boolean useSet(String[] arr, String targetValue) {SetString set new HashSetString(Arrays.asList(arr));return set.contains(targetValue); } 使用循环判断 public static boolean useLoop(String[] arr, String targetValue) {for(String s: arr){if(s.equals(targetValue))return true;}return false; } 使用Arrays.binarySearch() Arrays.binarySearch()方法只能用于有序数组如果数组无序的话得到的结果就会很奇怪。查找有序数组中是否包含某个值的用法如下 public static boolean useArraysBinarySearch(String[] arr, String targetValue) { int a  Arrays.binarySearch(arr, targetValue);if(a 0)return true;elsereturn false; } 时间复杂度 下面的代码可以大概的得出各种方法的时间成本。基本思想就是从数组中查找某个值数组的大小分别是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 setstartTime 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 loopstartTime System.nanoTime();for (int i 0; i 100000; i) {useLoop(arr, A);}endTime System.nanoTime();duration endTime - startTime;System.out.println(useLoop:   duration / 1000000);//use Arrays.binarySearch()startTime System.nanoTime();for (int i 0; i 100000; i) {useArraysBinarySearch(arr, A);}endTime System.nanoTime();duration endTime - startTime;System.out.println(useArrayBinary:   duration / 1000000); } 运行结果 useList:  13 useSet:  72 useLoop:  5 useArraysBinarySearch:  9 使用一个长度为1k的数组 String[] arr new String[1000];Random s new Random(); for(int i0; i 1000; i){arr[i] String.valueOf(s.nextInt()); } 结果 useList:  112 useSet:  2055 useLoop:  99 useArrayBinary:  12 使用一个长度为10k的数组 String[] arr new String[10000];Random s new Random(); for(int i0; i 10000; i){arr[i] String.valueOf(s.nextInt()); } 结果 useList:  1590 useSet:  23819 useLoop:  1526 useArrayBinary:  12 总结 显然使用一个简单的循环方法比使用任何集合都更加高效。许多开发人员为了方便都使用第一种方法但是他的效率也相对较低。因为将数组压入Collection类型中首先要将数组元素遍历一遍然后再使用集合类做其他操作。 如果使用Arrays.binarySearch()方法数组必须是已排序的。由于上面的数组并没有进行排序所以该方法不可使用。 实际上如果你需要借助数组或者集合类高效地检查数组中是否包含特定值一个已排序的列表或树可以做到时间复杂度为O(log(n))hashset可以达到O(1)。 英文原文结束以下是译者注使用ArrayUtils 除了以上几种以外Apache Commons类库中还提供了一个ArrayUtils类可以使用其contains方法判断数组和值的关系。 import org.apache.commons.lang3.ArrayUtils; public static boolean useArrayUtils(String[] arr, String targetValue) {return ArrayUtils.contains(arr,targetValue); } 同样使用以上几种长度的数组进行测试得出的结果是该方法的效率介于使用集合和使用循环判断之间有的时候结果甚至比使用循环要理想。 useList:  323 useSet:  3028 useLoop:  141 useArrayBinary:  12 useArrayUtils:  181 ------- useList:  3703 useSet:  35183 useLoop:  3218 useArrayBinary:  14 useArrayUtils:  3125 其实如果查看ArrayUtils.contains的源码可以发现他判断一个元素是否包含在数组中其实也是使用循环判断的方式。 部分代码如下if(array null) {return -1;} else {if(startIndex 0) {startIndex 0;}int i;if(objectToFind null) {for(i startIndex; i array.length; i) {if(array[i] null) {return i;}}} else if(array.getClass().getComponentType().isInstance(objectToFind)) {for(i startIndex; i array.length; i) {if(objectToFind.equals(array[i])) {return i;}}}return -1;} 所以相比较之下我更倾向于使用ArrayUtils工具类来进行一些合数祖相关的操作。毕竟他可以让我少写很多代码因为自己写代码难免有Bug毕竟apache提供的开源工具类库都是经过无数开发者考验过的而且效率上也并不低太多。
http://www.zqtcl.cn/news/163507/

相关文章:

  • 房地产公司网站制作电影发布网站模板
  • 如何利用开源代码做网站网站本科
  • 公司是做小程序还是做网站宜宾住房与城乡建设部网站
  • 做网站哪个公司最社区问答网站开发
  • 网站引量方法网站建设推广页
  • 书店网站的建设网络营销方法有哪些
  • 深圳网站优化软件顺企网怎么样
  • 做网站的需要什么要求中国五百强企业排名表
  • 网络营销 企业网站外贸响应式网站建设
  • 网站网页制作公司o2o平台是什么意思啊
  • 惠州市网站建设个人网站怎么进入后台维护
  • 微信网站链接怎么做wordpress 绑定手机版
  • 网站建设的内容是什么在线阅读小说网站怎么建设
  • 福州网站开发哪家比较好建设网站需要掌握什么编程语言
  • 邹平做网站的公司莱芜人才网莱芜招聘
  • 旅行网站开发意义怎样优化网络速度
  • 手机微网站建设多少钱拟定网络设计方案
  • 厦门制作公司网站安卓原生app开发工具
  • worldpress英文网站建设wordpress输出外部文章
  • u9u8网站建设商业公司的域名
  • 有学给宝宝做衣服的网站吗防网站黑客
  • 十大搜索引擎网站微信小程序有什么用处?
  • 团购网站 seo烟台网站建设方案优化
  • 公司网站建设招标文件范本公益永久免费主机
  • 建设银行网站查询企业年金五合一免费建站
  • 做网站开发挣钱吗做网站手机版
  • 网站建设案例精粹 电子书广州白云学校网站建设
  • 良品铺子网站制作用什么软件来做网站
  • ip直接访问网站 备案哪有深圳设计公司
  • 平面构成作品网站第一设计