对数组和indexOf()运行时进行排序

时间:2017-04-06 20:35:03

标签: javascript arrays performance ecmascript-6 ecmascript-5

假设array.indexOf()从数组的开头进行线性搜索是否安全?

因此,如果我经常搜索最大值,那么在调用indexOf之前对数组进行排序会让它运行得更快吗?

注意:

我想只排序一次并多次搜索。

“最大值”实际上是最受欢迎的搜索键,它是一个字符串。

1 个答案:

答案 0 :(得分:2)

是的,indexOf从第一个开始到最后一个。在询问之后的第一个条目之前对其进行排序会对性能产生影响,具体取决于排序算法的性能。通常在线性搜索中快速分配到O(n)的O(N log 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;
}

也许TreeSet也可以帮助你直到它的所有时间。

最后,我会说:“取决于您的数据容器以及如何实施订购或搜索以及需要在整个过程中的表现。”

正如评论所说,对于纯数组,你可以使binarySearch具有与quicksort相同的性能影响。

所以最后它不仅是算法性能的问题,而且还是你需要在这个过程中表现的时间。例如,如果你有很多时间通过添加值而没有时间来获得所需的值,那么排序结构可以很好地改进它,比如Tree-Collections。如果你需要通过添加它来获得更多的性能,或许反过来。