二分法查找将搜索次数压缩至对数级别,百万元素最多20次比较,但需数据有序且容器支持O(1)中间定位(ArrayList可行,LinkedList不行)。线性查找平均需检查一半元素,二分每次砍半范围,数据量过万后优势显著。查找失败返回插入位置索引,可高效维护有序列表。
当然,这个优势不是无条件就能拿到的。它有两个硬性前提:数据必须已经排好序,而且底层容器得支持O(1)时间定位中间元素——所以ArrayList行,LinkedList不行。后者每次取中间位置都得从头遍历,时间复杂度直接退化到O(n),二分查找也就名存实亡了。
- 调用binarySearch之前,务必确认列表已经按相同规则排好序
- 如果用了自定义Comparator来排序,binarySearch时也必须传入同一个实例
- 升序排完却拿降序Comparator去查,结果等于在乱序数据上硬套逻辑,毫无可靠性可言
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述