如何优化以下内容:
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中不存在字符串搜索。
谢谢。
答案 0 :(得分:19)
好吧,如果你有使用一个数组,并且你不知道它是否已经排序,而你只是要进行一次查找,那么它总是一个O(N )操作。你无能为力,因为任何优化步骤至少是O(N)开始 - 例如填充集合或对数组进行排序。
其他选择:
HashSet<String>
。这会将每个查找转换为O(1)操作(假设碰撞很少)。答案 1 :(得分:6)
import org.apache.commons.lang.ArrayUtils;
ArrayUtils.indexOf(array, string);
答案 2 :(得分:1)
您可以使用字符串的哈希码创建第二个数组,并使用二进制搜索。
您必须对哈希数组进行排序,并相应地移动原始数组的元素。通过这种方式,您将获得极快的搜索功能,但它将保持有序,因此插入新元素需要资源。
最优化的是实现二叉树或 B-tree ,如果你有非常多的数据并且你必须处理插入它是值得的。< / p>
答案 3 :(得分:1)
Arrays.asList(longStringArray)。载(searchingFor)