BinarySearch vs For循环

时间:2014-01-31 21:18:51

标签: java arrays search iteration

非常简单,性能明智,使用Arrays.binarySearch()与使用迭代循环(通过数组中的所有项 - 线性搜索)相比,如何在Array或ArrayList中查找值?最终用户是否能够看到任何延迟使用?

还有哪种方法比一种方法更好?

5 个答案:

答案 0 :(得分:3)

二进制搜索在O(log(n))时间内发生。线性搜索(即迭代整个数组)发生在O(n)时间内。在您可以随时随地使用二进制搜索时,有很强的巨大的优势。

一般情况下,您应该使用二进制搜索的情况是,当您确保您拥有的数据已经排序,并且高于某个最小数量时(因为如果您是个,那么您将不会注意到性能提升)用线性或二分搜索搜索5个项目。

但请注意,Arrays#binarySearch仅适用于数组,而不适用于ArrayList - 这些基本上是不同的对象。如果您想在List集合上进行二进制搜索,请使用Collections#binarySearch()

答案 1 :(得分:1)

二进制搜索要求对数组/列表进行排序。在执行此类搜索之前必须考虑这一点。

二进制搜索的好处是最坏的情况下运行时间是O(log(n))。另一方面,迭代搜索的最坏情况是O(n),无论它是否已被排序。根据数组/列表的大小,数据及其订购资格,用户可能会或可能不会注意到性能差异。

答案 2 :(得分:1)

如果您的数组已经排序,那么您必须使用二进制搜索,它将非常有用且执行速度快,时间复杂度为O(logn),如果是数组,则必须调用Arrays.binarySearch(),如果有的话集合它可能是列表或集合你必须调用集合binarySearch方法

答案 3 :(得分:0)

这将完全取决于相关数据。首先,您的数组需要进行排序。如果您的阵列非常小,您可能看不到显着差异。

如果您的阵列非常大且已排序,则在使用二进制搜索时会看到显着的速度提升。

注意:随着您的数据集变得越来越大,二进制搜索越来越快。这是因为线性算法与对数算法的增长性质。

答案 4 :(得分:0)

二进制搜索适用于集合(ArrayList也是它的实现)。方法位于java.util.Collections

public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)`

您的元素类应实现Comparable接口并实现public int compareTo(T o); 方法