如何检查一个没有排序的数组中是否含有某个值?这个操作在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)
相关推荐
首先,我们需要一个包含多个数值的数组,假设这个数组为`array`,我们要找的是最接近某个目标值`target`的五个数。`target`可以是用户指定的任意数值。 1. **预处理**:确保`array`中不包含重复元素,如果包含,...
ORACLE存储过程中定义数组并且判断某值是否在数组中。有例子可執行、 、有例子可執行、
### C# 中如何判断一个 Byte 数组中是否存在某些连续的数据 在C#中,要判断一个Byte数组中是否存在某些连续的数据,可以通过编写自定义的方法来实现。以下将详细解析题目中给出的代码示例,并进一步扩展相关的知识...
在上述代码中,我们创建了一个数组,并通过`alert`函数来显示数组中是否存在数字8。如果存在,将会弹出提示框显示`true`;如果不存在,则不会有任何显示。 总结来说,使用for循环来查询数组中是否存在某个值,是...
假设我们有一个数组`arr`,它包含`n`个整数,以及一个目标值`target`。我们的任务是找出数组中所有不同的元素对`(i, j)`,满足`arr[i] + arr[j] = target`。这里的“不同”指的是元素对中的索引`i`和`j`必须不相同,...
数据list,结构为[{id:1,…},{id:2,…}],数据shoplist,结构为[{id:1,…},{id:2,…}],判断当shoplist.id等于list.id时显示list的数据。 .vue文件: <button @click=clickButtonShopList>...
5. **遍历数组**:使用`for...in`循环遍历数组,检查每个对象的`str`属性值是否与`_tmp`相等。如果相等,将该对象添加到`_t`数组中;如果不等,说明遇到了新的属性值,此时将`_t`数组推入`_arr`,并用当前对象初始化...
本文实例讲述了PHP使用in_...而in_array 函数就是用来检查数组中是否存在某个值 。直接通过概念理解比较模糊,可以通过具体例子了解其作用。 语法如下: bool in_array( mixed needle, array array [, bool strict] )
### Perl中怎样从数组中删除某个值? 在Perl编程语言中,处理数组是十分常见的需求之一。本篇文章将深入探讨如何有效地从数组中删除特定值。我们不仅会介绍如何通过设置数组元素为`undef`来模拟删除的效果,还会...
在本例中,由于`'ph'`是一个数组,而`$a`中的元素包括一个包含'p'和'h'的数组,因此第一句输出"`'ph' was found`"。尽管字符串'o'与数组中的'单个字符'元素'o'相匹配,但`in_array()`在严格模式下仍然能找到它,因此...
在这个"易语言快速判断数组中的数值"的主题中,我们主要探讨如何在易语言中高效地检查一个数值是否存在于一个数值数组之中。 在易语言中,数组是一种数据结构,可以存储同一类型的数据集合。数组由一个或多个元素...
这个实现起来虽然不难,但是涉及到PHP中几个不常用的函数模块,对于很多PHP新手来说还确实是一个难题,今天就给大家分享一个实例,用4行代码就可以实现让PHP随机从数组中选取几个值,然后拼接成字符串并输出。...
这个函数接受一个整数数组和一个目标值作为参数,通过循环遍历数组,如果在数组中发现有元素与目标值相等,就立即返回 `true`。如果循环结束后仍未找到匹配的元素,则返回 `false`。 此外,C# 提供了更高级的数据...
删除数组中的某个元素
1. 编写一个程序打印数出有10个元素的浮点数组a1中最大值和最小值。 2.将有10个元素的数组a1 拷贝至含有15个元素的...5.设某个一维数组中有25个元素,编写一个顺序查找程序,从中查找值为80的元素在数组中的位置。
首先,我们需要定义一个函数来查找数组中的某个元素的索引。我们可以使用indexOf()方法来实现这一点,代码如下所示: Array.prototype.indexOf = function(val) { for (var i = 0; i ; i++) { if (this[i] == ...
获取JSON数组的某个值,判断其值是否为空。
本问题要求我们创建一个动态数组,其长度由用户输入决定,然后从屏幕上接收一组数字填充数组。接着,我们需要实现一系列功能,包括找到数组中的最大值、最小值以及它们对应的索引。下面将详细介绍如何实现这个任务。...
1. 编写一个程序打印数出有10个元素的浮点数组a1中最大值和最小值。 2.将有10个元素的数组a1 拷贝至含有15个元素的...5.设某个一维数组中有25个元素,编写一个顺序查找程序,从中查找值为80的元素在数组中的位置。