非常简单,性能明智,使用Arrays.binarySearch()
与使用迭代循环(通过数组中的所有项 - 线性搜索)相比,如何在Array或ArrayList中查找值?最终用户是否能够看到任何延迟使用?
还有哪种方法比一种方法更好?
答案 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);
方法