Java 在数组中搜索匹配的字符串

标签 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 在每个运行时只被搜索一次并且没有排序并且在我运行程序时每次都不同。

我确定这里有一种方法可以改善最坏情况下的性能,但我似乎找不到...

附言也希望有一个解决方案,其中字符串 searchingFor 不存在于数组 longStringArray 中。

谢谢。

最佳答案

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

其他选项:

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

关于Java 在数组中搜索匹配的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5539248/

相关文章:

java - 所有属性都必须影响 JavaBean 的 hashcode() 和 equals() 方法吗?

c++ - 将包含数组的结构推送到 vector 中

arrays - 将[] byte数组转换为uintptr

python - 如何使这个 for 循环在 Python 中工作?

c - 格式化字符串漏洞

MySQL获取每列记录中的子串匹配计数

java - 当它间接指向 ("hello"时,使用 new String "hello") 是否比简单的 "hello"完全无用?

java - REST Assured - 通用列表反序列化

java - 如何使用 SessionDestroyedEvent?

php - 如何在 PHP 中编码字节数组