`
还在吗
  • 浏览: 2112 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

如何检查一个数组中是否有某个值?

    博客分类:
  • Java
 
阅读更多

如何检查一个没有排序的数组中是否含有某个值?这个操作在Java中经常使用,也是很有用的;但采取的方式不同,时间复杂度也不同;

 

以下提供了4种方式: 

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<String> set = new HashSet<String>(Arrays.asList(arr));
	return set.contains(targetValue);
}

  

3)使用一个简单的循环: 

public static boolean useLoop(String[] arr, String targetValue) {
	for (String s : arr) {
		if (s.equals(targetValue))
			return true;
	}
	return false;
}

  

4)使用Arrays.binarySearch():

 下面的代码是错误的,列出来只是为了多提供一个而已。binarySearch() 只能用在已经排了序的数组上。

public static boolean useArraysBinarySearch(String[] arr, String targetValue) {
	int a = Arrays.binarySearch(arr, targetValue);
	if (a > 0)
		return true;
	else
		return false;
}

 

 

 时间复杂度: 

public static void main(String[] args) {
	String[] arr = new String[] { "CD", "BC", "EF", "DE", "AB" };
		
	// use list
	long 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);
		
    // 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 i=0; 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 i=0; i< 10000; i++){
	arr[i] = String.valueOf(s.nextInt());
}

结果:

    useList:  1590

    useSet:  23819

    useLoop:  1526

    useArrayBinary:  12

 

很明显,使用简单的for循环是最高效的。

如果使用Arrays.binarySearch(),那数组必须是已经排序。

 

事实上,一个已经排序的 List 或者 Tree 复杂度为O(log(n)),  HashSet 为O(1)

分享到:
评论

相关推荐

    用matlab如何求出一个数组中最接近某个数的五个数

    首先,我们需要一个包含多个数值的数组,假设这个数组为`array`,我们要找的是最接近某个目标值`target`的五个数。`target`可以是用户指定的任意数值。 1. **预处理**:确保`array`中不包含重复元素,如果包含,...

    ORACLE存储过程中定义数组并且判断某值是否在数组中.txt

    ORACLE存储过程中定义数组并且判断某值是否在数组中。有例子可執行、 、有例子可執行、

    C# 如何判断一个Byte数组中是否存在某些连续的数据).txt

    ### C# 中如何判断一个 Byte 数组中是否存在某些连续的数据 在C#中,要判断一个Byte数组中是否存在某些连续的数据,可以通过编写自定义的方法来实现。以下将详细解析题目中给出的代码示例,并进一步扩展相关的知识...

    js使用for循环查询数组中是否存在某个值

    在上述代码中,我们创建了一个数组,并通过`alert`函数来显示数组中是否存在数字8。如果存在,将会弹出提示框显示`true`;如果不存在,则不会有任何显示。 总结来说,使用for循环来查询数组中是否存在某个值,是...

    查找数组中和为某个值的元素对的个数

    假设我们有一个数组`arr`,它包含`n`个整数,以及一个目标值`target`。我们的任务是找出数组中所有不同的元素对`(i, j)`,满足`arr[i] + arr[j] = target`。这里的“不同”指的是元素对中的索引`i`和`j`必须不相同,...

    Vue监听一个数组id是否与另一个数组id相同的方法

    数据list,结构为[{id:1,…},{id:2,…}],数据shoplist,结构为[{id:1,…},{id:2,…}],判断当shoplist.id等于list.id时显示list的数据。 .vue文件: &lt;button @click=clickButtonShopList&gt;...

    js中数组中相同的元素进行整合并创建一个新数组.pdf

    5. **遍历数组**:使用`for...in`循环遍历数组,检查每个对象的`str`属性值是否与`_tmp`相等。如果相等,将该对象添加到`_t`数组中;如果不等,说明遇到了新的属性值,此时将`_t`数组推入`_arr`,并用当前对象初始化...

    js使用for循环查询数组中是否存在某个值.docx

    js使用for循环查询数组中是否存在某个值.docx

    js使用for循环查询数组中是否存在某个值.pdf

    js使用for循环查询数组中是否存在某个值.pdf

    PHP使用in_array函数检查数组中是否存在某个值

    本文实例讲述了PHP使用in_...而in_array 函数就是用来检查数组中是否存在某个值 。直接通过概念理解比较模糊,可以通过具体例子了解其作用。 语法如下: bool in_array( mixed needle, array array [, bool strict] )

    Perl中怎样从数组中删除某个值?

    ### Perl中怎样从数组中删除某个值? 在Perl编程语言中,处理数组是十分常见的需求之一。本篇文章将深入探讨如何有效地从数组中删除特定值。我们不仅会介绍如何通过设置数组元素为`undef`来模拟删除的效果,还会...

    PHP用法in_array函数检查数组中是否存在某个值_.docx

    在本例中,由于`'ph'`是一个数组,而`$a`中的元素包括一个包含'p'和'h'的数组,因此第一句输出"`'ph' was found`"。尽管字符串'o'与数组中的'单个字符'元素'o'相匹配,但`in_array()`在严格模式下仍然能找到它,因此...

    js判断数组是否相等的方法

    - 对于无重复元素的数组,可以使用`every`和`includes`方法来检查是否所有元素都在另一个数组中: ```javascript const isArrEqual = (arr1, arr2) =&gt; { return arr1.length === arr2.length && arr1.every(...

    PHP从数组中随机选取几个值组成新的字符串(输出字符串非数组)

    这个实现起来虽然不难,但是涉及到PHP中几个不常用的函数模块,对于很多PHP新手来说还确实是一个难题,今天就给大家分享一个实例,用4行代码就可以实现让PHP随机从数组中选取几个值,然后拼接成字符串并输出。...

    易语言快速判断数组中的数值

    在这个"易语言快速判断数组中的数值"的主题中,我们主要探讨如何在易语言中高效地检查一个数值是否存在于一个数值数组之中。 在易语言中,数组是一种数据结构,可以存储同一类型的数据集合。数组由一个或多个元素...

    查找数组中的数

    这个函数接受一个整数数组和一个目标值作为参数,通过循环遍历数组,如果在数组中发现有元素与目标值相等,就立即返回 `true`。如果循环结束后仍未找到匹配的元素,则返回 `false`。 此外,C# 提供了更高级的数据...

    去除matlab数组中的某个元素

    删除数组中的某个元素

    java编程 java数组编程

    1. 编写一个程序打印数出有10个元素的浮点数组a1中最大值和最小值。 2.将有10个元素的数组a1 拷贝至含有15个元素的...5.设某个一维数组中有25个元素,编写一个顺序查找程序,从中查找值为80的元素在数组中的位置。

    删除数组中的某个元素 JS删除数组中的某个元素

    首先,我们需要定义一个函数来查找数组中的某个元素的索引。我们可以使用indexOf()方法来实现这一点,代码如下所示: Array.prototype.indexOf = function(val) { for (var i = 0; i ; i++) { if (this[i] == ...

Global site tag (gtag.js) - Google Analytics