Java搜索匹配字符串的数组

时间:2011-04-04 13:33:09

标签: java arrays string match

如何优化以下内容:

final String[] longStringArray = {"1","2","3".....,"9999999"};
String searchingFor = "9999998"
for(String s : longStringArray)
    {
        if(searchingFor.equals(s))
        {
            //After 9999998 iterations finally found it
            // Do the rest of stuff here (not relevant to the string/array)
        }
    }

注意:每个运行时只检索一次longStringArray&没有排序&每次运行程序都会有所不同。

我确定有一种方法可以改善最坏情况的表现,但我似乎无法找到它......

P.S。还要感谢一个解决方案,其中数组longStringArray中不存在字符串搜索。

谢谢。

4 个答案:

答案 0 :(得分:19)

好吧,如果你使用一个数组,并且你不知道它是否已经排序,而你只是要进行一次查找,那么它总是一个O(N )操作。你无能为力,因为任何优化步骤至少是O(N)开始 - 例如填充集合或对数组进行排序。

其他选择:

  • 如果数组已排序,您可以执行二进制搜索。这会将每个查找转换为O(log N)操作。
  • 如果您要进行多项搜索,请考虑使用HashSet<String>。这会将每个查找转换为O(1)操作(假设碰撞很少)。

答案 1 :(得分:6)

import org.apache.commons.lang.ArrayUtils;
ArrayUtils.indexOf(array, string);

ArrayUtils documentation

答案 2 :(得分:1)

您可以使用字符串的哈希码创建第二个数组,并使用二进制搜索。

您必须对哈希数组进行排序,并相应地移动原始数组的元素。通过这种方式,您将获得极快的搜索功能,但它将保持有序,因此插入新元素需要资源。

最优化的是实现二叉树 B-tree ,如果你有非常多的数据并且你必须处理插入它是值得的。< / p>

答案 3 :(得分:1)

Arrays.asList(longStringArray)。载(searchingFor)