可以假设array.indexOf()
从数组的开头开始进行线性搜索吗?
如果我经常搜索最大值,那么在调用indexOf
之前对数组进行排序会使它运行得更快吗?
注:
我想只排序一次并多次搜索。
“最大值”实际上是一个字符串,是最常用的搜索关键字。
可以假设array.indexOf()
从数组的开头开始进行线性搜索吗?
如果我经常搜索最大值,那么在调用indexOf
之前对数组进行排序会使它运行得更快吗?
注:
我想只排序一次并多次搜索。
“最大值”实际上是一个字符串,是最常用的搜索关键字。
是的,indexOf从第一个开始到最后一个。在询问第一个条目之前对其进行排序会根据排序算法的性能而产生不同的性能影响。通常是快速排序中的O(N log N)到线性搜索中的O(n)。我建议您使用随机值计数进行简单测试,并查看性能如何表现。
当然这取决于您的DataObject:
ArrayList:public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
indexOf
,而应该使用二分查找。 - BergilastIndexOf()
了吗?它在某些情况下似乎比indexOf()
表现更好...只是一个想法。 - Zathrus Writer