public boolean findString(String[] strings, String desired){
for (String str : strings){
if (desired.equals(str)) {
return true;
}
}
return false; //if we get here… there is no desired String, return false.
}
public static <T> boolean contains(final T[] array, final T v) {
for (final T e : array)
if (e == v || v != null && v.equals(e))
return true;
return false;
}
改进: 这个 v != null 方法内部的条件是恒定的。在方法调用期间,它总是计算为相同的布尔值。所以如果输入 array 是大的,只计算一次这个条件更有效,我们可以在内部使用一个简化的/更快的条件 for 基于结果的循环。改进的 contains() 方法:
public static <T> boolean contains2(final T[] array, final T v) {
if (v == null) {
for (final T e : array)
if (e == null)
return true;
}
else {
for (final T e : array)
if (e == v || v.equals(e))
return true;
}
return false;
}
29条答案
按热度按时间mxg2im7a16#
如果你不想区分大小写
jhkqcmku17#
开发人员通常会:
上面的代码可以工作,但是不需要先将列表转换为set。将列表转换为集合需要额外的时间。它可以简单到:
或
第一个比第二个可读。
xv8emn3q18#
使用简单的循环是最有效的方法。
对programcreek的礼遇
kxxlusnw19#
arrays.aslist()->然后调用contains()方法将始终有效,但是搜索算法要好得多,因为不需要在数组周围创建轻量级的列表 Package 器,而arrays.aslist()就是这样做的。
jbose2ul20#
值得一提的是,我做了一个测试,比较了3个关于速度的建议。我生成了随机整数,将它们转换成字符串并将它们添加到数组中。然后,我搜索了可能的最高数字/字符串,这对于
asList().contains()
.当使用10k数组大小时,结果是:
使用100k阵列时,结果是:
因此,如果按排序顺序创建数组,则二进制搜索速度最快,否则
asList().contains
会是最好的选择。如果您有许多搜索,那么对数组进行排序可能是值得的,这样您就可以使用二进制搜索。这完全取决于你的申请。我认为这是大多数人所期待的结果。测试代码如下:
wpcxdonn21#
实际上,如果像tom hawtin建议的那样使用hashset,就不必担心排序问题,而且您的速度与预排序数组上的二进制搜索相同,甚至可能更快。
显然,这完全取决于代码的设置方式,但从我的立场来看,顺序是:
在未排序的数组上:
容器
aslist公司
排序二进制(&B)
在排序数组上:
容器
二元的
aslist公司
所以不管怎样,我都会赢的。
vsaztqbk22#
你可以用两种方法来检查
a) 通过将数组转换为字符串,然后通过.contains方法检查所需的字符串
b) 这是一种更有效的方法
kx1ctssn23#
可以使用arrays类对值执行二进制搜索。如果数组没有排序,则必须使用同一类中的排序函数对数组进行排序,然后在其中进行搜索。
d7v8vwbk24#
检查数组是否包含值的四种不同方法
使用
List
:使用
Set
:使用简单循环:
使用
Arrays.binarySearch()
:下面的代码是错误的,为了完整起见,这里列出了它。
binarySearch()
只能用于排序数组。你会发现下面的结果很奇怪。这是排序数组时的最佳选项。快速示例:
cu6pst1q25#
你可以用
ArrayUtils.contains
来自apache commons langpublic static boolean contains(Object[] array, Object objectToFind)
请注意,此方法返回false
如果传递的数组是null
.还有一些方法可用于各种基本数组。
示例:
qgelzfjb26#
只需手动执行即可:
改进:
这个
v != null
方法内部的条件是恒定的。在方法调用期间,它总是计算为相同的布尔值。所以如果输入array
是大的,只计算一次这个条件更有效,我们可以在内部使用一个简化的/更快的条件for
基于结果的循环。改进的contains()
方法:mefy6pfw27#
尝试使用Java8 predicate 测试方法
下面是一个完整的例子。
http://mytechnologythought.blogspot.com/2019/10/java-8-predicate-test-method-example.html
https://github.com/vipulgulhane1/java8/blob/master/test.java
gupuwyp228#
创建一个最初设置为false的布尔值。运行一个循环来检查数组中的每个值,并与要检查的值进行比较。如果得到匹配,请将boolean设置为true并停止循环。然后Assert布尔值为真。
nhaq1z2129#
obstupidanswer(但我认为在这里有一个教训):