首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何确定数组中是否包含Java中的特定值?

如何确定数组中是否包含Java中的特定值?
EN

Stack Overflow用户
提问于 2009-07-15 00:03:22
回答 19查看 2.4M关注 0票数 2.5K

我有一个String[],它的值如下:

public static final String[] VALUES = new String[] {"AB","BC","CD","AE"};

给定String s,有没有一种测试VALUES是否包含s的好方法

EN

回答 19

Stack Overflow用户

发布于 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.
}
票数 223
EN

Stack Overflow用户

发布于 2009-07-15 00:05:48

如果数组未排序,则必须遍历所有内容并对每个数组调用equals。

如果对数组进行了排序,您可以执行二进制搜索,在Arrays类中有一个。

一般来说,如果您要进行大量的成员检查,您可能希望将所有内容存储在一个集合中,而不是数组中。

票数 74
EN

Stack Overflow用户

发布于 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));
    }
}
票数 52
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1128723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档