一维数组查找与排序需据场景选择:无序且单次查询用线性查找,频繁查询则先排序再二分;arrays.sort()对基本类型用双轴快排、对象用归并排序;避免每次插入都重排序,可改用treeset等自动保序结构。

一维数组是 Java 中最基础的数据结构之一,掌握它在查找与排序中的实际应用,是写好业务逻辑和算法题的关键。下面从几个典型场景出发,讲清楚怎么用、要注意什么。
查找:线性查找与二分查找怎么选?
线性查找适合无序数组,遍历一次就能判断元素是否存在;二分查找效率更高,但前提是数组必须有序。别直接套用二分——先排序再查,反而可能得不偿失。
- 如果只查一次,且数组无序,用 for 循环逐个比对,代码简洁又安全
- 如果频繁查询,且数据相对固定,建议先 Arrays.sort() 排序,再用 Arrays.binarySearch()
- 注意 binarySearch 返回的是索引值,找不到时返回负数(不是 -1!),可用 result >= 0 判断是否找到
排序:内置方法够用,但得知道它怎么工作
Arrays.sort() 是最常用的方式,对 int[] 等基本类型使用双轴快排,对对象数组默认用归并排序(稳定)。不需要自己重写快排,除非有特殊要求(比如按自定义规则或内存受限)。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 基本类型数组直接调用 Arrays.sort(arr)
- 字符串或自定义对象数组,可传入 Comparator,比如 Arrays.sort(names, String::compareToIgnoreCase)
- 若需降序,基本类型不能直接用 Collections.reverseOrder(),要先转成包装类型数组,或手写比较器
边查边排:一个常见误区
有些同学习惯“每次插入新数据就重新 sort + search”,这在数据量大时非常低效。其实多数场景下,可以维护一个有序列表(比如用 ArrayList 配合二分插入),或者改用 TreeSet / TreeMap 自动保序。
- 小规模数据(
- 中等规模(几百到几千),建议用 Collections.binarySearch 配合 ArrayList.add(index, item) 实现有序插入
- 大规模或高频增删查,优先考虑 TreeSet(不允许重复)或 TreeMap(带键值),底层红黑树自动维持顺序
实战小技巧:避免越界和空指针
数组操作最容易出错的就是下标越界和 null 引用。尤其在查找返回索引后直接访问 arr[index] 前,一定要确认结果有效。
- 调用 binarySearch 前检查数组是否为 null,长度是否大于 0
- 查找结果用于取值前,先判断 index >= 0 && index
- 排序前也建议加判空,Arrays.sort(null) 会直接抛 NullPointerException
不复杂但容易忽略。把数组当工具用,而不是背算法,才能写出既正确又易维护的代码。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










