我有一个String[]
,它的值如下:
public static final String[] VALUES = new String[] {"AB","BC","CD","AE"};
给定String s
,有没有一种测试VALUES
是否包含s
的好方法
发布于 2011-05-31 21:17:30
您可以从Apache Commons Lang使用ArrayUtils.contains
[public static boolean contains(Object[] array, Object objectToFind)
](http://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/ArrayUtils.html#contains(java.lang.Object[],%20java.lang.Object%29)
请注意,如果传递的数组为null
,则此方法返回false
。
对于所有类型的原始数组,也有可用的方法。
示例:
String[] fieldsToInclude = { "id", "name", "location" };
if ( ArrayUtils.contains( fieldsToInclude, "id" ) ) {
// Do some stuff.
}
发布于 2009-07-15 00:05:48
如果数组未排序,则必须遍历所有内容并对每个数组调用equals。
如果对数组进行了排序,您可以执行二进制搜索,在Arrays类中有一个。
一般来说,如果您要进行大量的成员检查,您可能希望将所有内容存储在一个集合中,而不是数组中。
发布于 2009-07-15 01:28:52
为了更有价值,我运行了一个测试,比较了3个关于速度的建议。我生成了随机整数,将它们转换为字符串,并将它们添加到数组中。然后,我搜索可能最高的数字/字符串,这对asList().contains()
来说是最坏的情况。
当使用10K数组大小时,结果为:
Sort & Search : 15
Binary Search : 0
asList.contains : 0
使用100K阵列时,结果为:
Sort & Search : 156
Binary Search : 0
asList.contains : 32
因此,如果数组是按排序顺序创建的,那么二进制搜索是最快的,否则asList().contains
将是可行的。如果您有许多搜索,那么对数组进行排序可能是值得的,这样您就可以使用二进制搜索。这完全取决于您的应用程序。
我认为这是大多数人所期待的结果。下面是测试代码:
import java.util.*;
public class Test {
public static void main(String args[]) {
long start = 0;
int size = 100000;
String[] strings = new String[size];
Random random = new Random();
for (int i = 0; i < size; i++)
strings[i] = "" + random.nextInt(size);
start = System.currentTimeMillis();
Arrays.sort(strings);
System.out.println(Arrays.binarySearch(strings, "" + (size - 1)));
System.out.println("Sort & Search : "
+ (System.currentTimeMillis() - start));
start = System.currentTimeMillis();
System.out.println(Arrays.binarySearch(strings, "" + (size - 1)));
System.out.println("Search : "
+ (System.currentTimeMillis() - start));
start = System.currentTimeMillis();
System.out.println(Arrays.asList(strings).contains("" + (size - 1)));
System.out.println("Contains : "
+ (System.currentTimeMillis() - start));
}
}
https://stackoverflow.com/questions/1128723
复制相似问题