我有一个String[],其值如下:
public static final String[] VALUES = new String[] {"AB","BC","CD","AE"};
给定字符串s,是否有一种测试VALUES是否包含s的好方法?
我有一个String[],其值如下:
public static final String[] VALUES = new String[] {"AB","BC","CD","AE"};
给定字符串s,是否有一种测试VALUES是否包含s的好方法?
当前回答
您可以直接使用Arrays.asList方法以类似的方式将其初始化为List,而不是使用快速数组初始化语法,例如:
public static final List<String> STRINGS = Arrays.asList("firstString", "secondString" ...., "lastString");
然后您可以执行(如上所述):
STRINGS.contains("the string you want to find");
其他回答
事实上,如果按照Tom Hawtin的建议使用HashSet<String>,您就不必担心排序问题,而且您的速度与对预排序数组进行二进制搜索的速度相同,甚至可能更快。
显然,这取决于代码的设置方式,但从我的立场来看,顺序应该是:
在未排序的数组上:
哈希集as列表排序二进制(&B)
在排序数组上:
哈希集二进制的as列表
所以不管怎样,HashSet都会获胜。
Arrays.asList()->然后调用contains()方法将始终有效,但搜索算法要好得多,因为不需要在数组周围创建轻量级列表包装器,这就是Arrays.as list()所做的。
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.
}
使用简单的循环是最有效的方法。
boolean useLoop(String[] arr, String targetValue) {
for(String s: arr){
if(s.equals(targetValue))
return true;
}
return false;
}
由Programcreek提供
Arrays.asList(yourArray).contains(yourValue)
警告:这对基元数组无效(请参见注释)。
从java-8开始,您现在可以使用Streams。
String[] values = {"AB","BC","CD","AE"};
boolean contains = Arrays.stream(values).anyMatch("s"::equals);
要检查int、double或long数组是否包含值,请分别使用IntStream、DoubleStream或LongStream。
实例
int[] a = {1,2,3,4};
boolean contains = IntStream.of(a).anyMatch(x -> x == 4);
使用Array.BinarySearch(Array,obj)查找数组中的给定对象。
例子:
if (Array.BinarySearch(str, i) > -1)` → true --exists
false--不存在