如何高效判断java数组是否包含某个值

疯狂的小码农 疯狂的小码农     2022-10-02     128

关键词:

在java中,我们如何判断一个未排序数组中是否包含一个特定的值?这在java中是一个频繁非常实用的操作。那么什么样的方法才是最高效的方式?当然

,这个问题在Stack Overflow也是得票率非常高的一个问答。得票率排在最前的几个答案给出集中不同的方法,但是他们的时间复杂度却相差甚远。
本文将详细的探讨主流的方法,并给出他们各自的时间损耗。
四种方法
List
public static boolean useList(String[] arr,String value){
return Arrays.asList(arr).contains(value);
}
Set
public static boolean useSet(String[] arr,String value){
return sets.contains(value)
}
loop
public static boolean useLoop(String[] arr,String value){
for(String s:arr){
if(s.equals(value))
return true;
}
return false;
}
binarySearch
public static boolean useBinarySearch(String[] arr,String value){
int result=Arrays.binarySearch(arr,value);
if(result>0)
return true;
else
return false;
}
此方法是不正确的,因为Arrays的binarySearch方法必须应用于有序数组。
性能对比
如果读者熟悉以上java代码片段中出现的集中数据结构,那么可以利用时间复杂度计算标准,
先推算这四种方式的性能对比的大致结果。当然,我们这里不采用这种方式,而是直接运用
如下测试代码对比这四种方式的时间损耗情况。为了使得我们的测试结果更具有代表性,我们
针对不同的数据量做了多组测试。也许,这个测量方式并不精确,但是测量结果是清晰和可
信任的。测试的示例代码如下:
public static void main(String[] args) {

String[] arr = new String[] { “www.”, “tiantian”, “bian”, “ma”, “.com”};

long startTime = System.nanoTime();
for (int i = 0; i < 100000; i++) {
// use list
useList(arr, “天天编码”);
// use set
//useSet(arr, “天天编码”);
// use loop
//useLoop(arr, “天天编码”);
// use binarySearch
//useBinarySearch(arr, “天天编码”);
long endTime = System.nanoTime();
long duration = endTime = startTime;
System.out.pri}

数组长度     方法       运行耗时      数组长度     方法       运行耗时

5          list          13        100              list         50

5         set        72       100       set         668
5         loop       5        100        loop          47
5          binarySearch   100      inarySearch    8
1k        list         112       10k        list       1590
1k       set         2055      10k          set 23819
1k        loop        99       10k         loop 1526
1k       binarySearch   12       10k        binarySearch   12
总结
参照这个表格,结论已经很明显了。最简单的Loop方法比其他任何使用集合容器的方法都更加高效。
很多的开源项目代码显示,很多Java开发者喜欢使用第一种方法(list),实际上,该方法的性能并不好。
该方法把一个数组的元素转移到一个新的集合容器中,显然,在所有的元素转移完成之前,新的集合容器处于不可用的状态。

该表格还反映出一个事实:Arrays.binarySearch()方法的性能是最好的,特别是对于数组长度很大的数组。
但是该方法要求数组必须有序,这限制住了该方法的使用场景,本文实例代码中的数组并不是有序的,
所以不应该使用该方法。

实际上,如果你确实需要高效地检查某个特定值是否被包含在某些数组或者集合容器中,
你应该考虑使用有序列表或有序树,这些集合容器查找特定值的时间复杂度是 O(log(n))。
当然,如果使用哈希集合,时间复杂度下降为 O(1)。

在java中如何高效判断数组中是否包含某个元素

  如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作。同时,这个问题在StackOverflow中也是一个非常热门的问题。在投票比较高的几个答案中给出了几种不同的方法,但是他们的时... 查看详情

在java中如何高效判断数组中是否包含某个元素

如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作。同时,这个问题在StackOverflow中也是一个非常热门的问题。在投票比较高的几个答案中给出了几种不同的方法,但是他们的时间... 查看详情

如何高效地判断数组中是否包含某特定值

如何检查一个未排序的数组中是否包含某个特定的值,这是在Java中非常实用并且频繁使用的操作。另外,检查数组中是否包含特定值可以用多种不同的方式实现,但是时间复杂度差别很大。下面,我将为大家展示各种方法及其... 查看详情

如何高效地判断数组中是否包含某特定值

        如何检查一个未排序的数组中是否包含某个特定值,这是一个在Java中非常实用并且频繁使用的操作。检查数组中是否包含特定值可以用多种不同的方式实现,但是时间复杂度差别很大。下面... 查看详情

在java中如何高效的判断数组中是否包含某个元素(代码片段)

importorg.apache.commons.lang3.ArrayUtils;publicstaticbooleanuseArrayUtils(String[]arr,StringtargetValue)returnArrayUtils.contains(arr,targetValue);  查看详情

怎样高效地去判断array中是否包含某个值?

问题怎样去判断Array(无序)中是否包含某个值呢?这是一个在Java中经常被问到的问题。它也是StackOverflow上投票前几的一个问题。下面将展示投票前几的几个回答,这些回答使用不同的方式解决了这个问题,但是,时间复杂度... 查看详情

灵魂拷问:如何检查java数组中是否包含某个值?(代码片段)

...候,我发现了一些专注细节但价值连城的主题。比如说:如何检查Java数组中是否包含某个值?像这类灵魂拷问的主题,非常值得深入地研究一下。另外,我想要告诉大家的是,作为程序员,我们千万不要轻视这些基础的知识点... 查看详情

检查数组是否包含某个值的方法

检查数组是否包含某个值的方法使用ListpublicstaticbooleanreturnArrays.asList(arr).contains(targetValue);}使用SetpublicstaticsetnewHashSet<String>(Arrays.asList(arr));returnset.contains(targetValue);}使用循环判断publicsta 查看详情

js如何判断一个数组是否为空是否含有某个值(代码片段)

一、js判断数组是否为空 方法一:  arr.lengthletarr=[];if(arr.length==0)console.log("数组为空")elseconsole.log("数组不为空")二、js判断数组是否含有某个值 方法一: arr.indexOf()if(arr.indexOf(2)!=-1)console.log("数组 查看详情

java判断一个字符串是否包含某个字符

1问题如何利用Java通过不同的方法来判断一个字符串是否包含某个字符。2方法.contains方法这个是利用java.lang.String.contains() 方法返回true,当且仅当此字符串包含指定的char值序列,此方法返回true,如果此字符串包含... 查看详情

java判断一个字符串是否包含某个字符

1问题如何利用Java通过不同的方法来判断一个字符串是否包含某个字符。2方法.contains方法这个是利用java.lang.String.contains() 方法返回true,当且仅当此字符串包含指定的char值序列,此方法返回true,如果此字符串包含... 查看详情

前端面试javascript—js判断数组中是否包含某个值(代码片段)

方法一:array.indexOf()此方法判断数组中是否存在某个值,如果存在,则返回数组元素的下标,否则返回-1vararr=[1,2,3,4];varindex=arr.indexOf(3);console.log(index);//2方法二:array.includes()此方法判断数组中是否存在某... 查看详情

前端面试javascript—js判断数组中是否包含某个值(代码片段)

方法一:array.indexOf()此方法判断数组中是否存在某个值,如果存在,则返回数组元素的下标,否则返回-1vararr=[1,2,3,4];varindex=arr.indexOf(3);console.log(index);//2方法二:array.includes()此方法判断数组中是否存在某... 查看详情

jquery如何判断值中是不是包含某个值?

比如$("#txt_Price").val()获取了它的值,如何判断值中是否有标点?参考技术AJQuery判断值中是否包含某个值的方法是利用contains函数:1、定义一个源字符串:vartestStr="Thisisatest";2、利用contains方法测试是否含有test字样:... 查看详情

如何检查arraylist中的数组是不是包含某个值?

】如何检查arraylist中的数组是不是包含某个值?【英文标题】:Howtocheckifanarrayinanarraylistcontainsacertainvalue?如何检查arraylist中的数组是否包含某个值?【发布时间】:2014-12-0301:15:04【问题描述】:我有一个数组列表,其中包含字符... 查看详情

js如何判断一个数组是不是为空、是不是含有某个值

参考技术A一、js判断数组是否为空方法一:arr.length二、js判断数组是否含有某个值方法一:arr.indexOf()方法二:for循环结合if判断方法三:arr.find(callback)方法四:arr.includes()数组中含有某值返回true,没有返回false。ES6新方法。 查看详情

java数组操作方法收集(快速判断某个值在这个数组中)

Java数组操作最高效的方式是循环取值,如果转换成集合那么就会分配内存,效率不如前者,但是方法多,需要在性能调优上去权衡。切记:数组是数组,集合是集合。下面是收集最常用的数组转成集合的操作方法:importorg.apache.... 查看详情

python:如何判断列表中的元素是否包含某个数字?(代码片段)

...了:False如果我检查33是否存在,当然我得到“真实”。如何正确检查列表元素中是否存在数字?答案一个非常简单的方法是这个:li=[33,44,55]['3'instr(x)forxinli]这给了[True,False,False]通过使用列表推导,我们通过li的元素,将值转换... 查看详情