Java搜索匹配字符串的数组

Sig*_*ran 5 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)
        }
    }
Run Code Online (Sandbox Code Playgroud)

注意:longStringArray每个运行时只搜索一次,并且没有排序,并且每次运行程序时都不同.

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

PS也会欣赏一个解决方案,其中数组longStringArray中不存在字符串搜索.

谢谢.

Jon*_*eet 19

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

其他选择:

  • 如果数组已排序,则可以执行二进制搜索.这会将每个查找转换为O(log N)操作.
  • 如果您要进行多个搜索,请考虑使用HashSet<String>.这将使每个查找变为O(1)操作(假设几次冲突).


小智 6

import org.apache.commons.lang.ArrayUtils;
ArrayUtils.indexOf(array, string);
Run Code Online (Sandbox Code Playgroud)

ArrayUtils文档