一维数组查找关键是“怎么找得快、找得准”,需据数据有序性、查询频次和定位需求选择方法:无序或低频用顺序查找(o(n));有序则用二分查找(o(log n)),可精准定位范围;实际常结合排序、哈希索引或精度阈值等策略优化。

一维数组查找不是“找不找得到”的问题,而是“怎么找得快、找得准”的问题。关键看数据是否有序、查找频次高低、是否需要定位范围——选对方法,效率能差出几十倍。
顺序查找:简单直接,适合小规模或无序场景
当数组没排序,或者只查一两次,顺序查找最省事。从头到尾逐个比对,代码几行就搞定,不用预处理,也不怕插入删除打乱顺序。
- 时间复杂度固定是 O(n),最坏要扫完整个数组
- 适用长度几十以内的数组,比如录入6个[30,60)之间不重复整数的练习题
- 边界只需判断 i ,越界风险低,调试友好
二分查找:对数级提速,但必须严格有序
数组一旦升序(或降序)排好,二分就能把百万级查找压缩到最多20次比较。它不只回答“在不在”,还能精准返回“从哪开始、到哪结束”。
- 每次取中点比较,根据大小关系砍掉一半搜索区间
- 左边界写法:l = mid + 1,r = mid;右边界则反过来,避免死循环
- 配合两次二分,可获取某值首次和末次出现位置,进而算出频次或覆盖区间
实际项目中的常见组合策略
纯数组很少单打独斗,真实业务里常搭配其他手段让查找更稳更快:
- 数据更新少、查询多?先排序 + 二分,性价比最高
- 增删查频繁交替?考虑用 HashMap 做索引,底层仍可用一维数组存原始数据
- 查浮点数(如解方程求根)?二分照样能用,把“相等”换成“差值小于精度阈值”即可
- 递归写法利于理解逻辑,迭代实现更省内存,两者效果一致
动手前先想清楚三个问题
写查找代码前花一分钟确认,能少踩大半坑:
- 数组当前是否已排序?没排就别硬上二分
- 你要的只是“存在与否”,还是“第一次在哪”“一共出现几次”?
- 后续还会插入新元素吗?如果会,维护有序的成本要不要计入设计?
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











