Java 中数组怎么高效统计每个元素的频率
统计数组元素频率可采用HashMap手动遍历(O(n),通用清晰)、IntStream+groupingBy(函数式但有装箱开销)或计数数组(非负整数且范围有限时性能最优)。避免嵌套循环和重复流操作,优先保证线性时间复杂度和可读性。
说到统计Ja va数组元素频率,很多人第一反应就是双重循环暴力计数——但那样效率太低了。实际上,有几种高效方案:HashMap手动遍历(O(n),通用清晰)、IntStream + groupingBy(适合基本类型,有装箱开销),或者计数数组(非负整数且范围有限时性能直接拉满)。记住一条铁律:避免嵌套循环、重复流操作,那是给自己挖坑。

那么具体怎么选?核心原则很简单:时间复杂度控制在 O(n),同时兼顾可读性和内存开销。下面逐一拆解。
用 HashMap 手动遍历(通用、清晰、推荐)
这个方法适用于任意类型数组,包括自定义对象(前提是保证 equals() 和 hashCode() 正确实现)。遍历一次,边读边累加:
- 创建
Map,键为元素,值为出现次数。 - 对每个元素:用
map.merge(element, 1, Integer::sum)最简洁;或用getOrDefault再put也行。 - 整型数组示例:
int[] arr = {1,2,2,3,3,3};→Map,循环中freq = new HashMap<>(); freq.merge(x, 1, Integer::sum);一步到位。
用 IntStream + groupingBy(仅限 int/long/double,函数式风格)
如果你偏爱函数式写法,可以用 Stream 来实现。但注意隐含的装箱开销:Arrays.stream(arr) 对 int[] 返回的是 IntStream,必须调用 .boxed() 才能转为 Integer 流:
Mapfreq = Arrays.stream(arr).boxed().collect(Collectors.groupingBy(Function.identity(), Collectors.counting())); - 返回值是
Long计数,如果你非要Integer,可以换成Collectors.summingInt(e -> 1)。 - 小数据量代码确实紧凑,但大数组频繁装箱会影响性能,权衡着用。
针对纯正整数且范围有限的场景:用计数数组(最快,O(1) 查找)
当元素都是非负整数,且最大值已知且不太大(比如 0~10000),直接用数组索引当键:
- 申请
int[] count = new int[maxValue + 1]; - 遍历原数组:对每个
x,执行count[x]++。 - 不需要哈希计算,没有装箱,内存局部性好——速度最快。
- 缺点也明显:不支持负数、字符串、大范围或稀疏数据(比如元素是 1 和 999999,浪费大量空间)。
避免常见低效写法
以下写法尽量避开:
- 双重 for 循环逐个统计:时间复杂度 O(n²),数据量一上万就肉眼可见地慢。
- 每次调用
Arrays.asList(arr).stream().filter(...).count():反复创建流和中间集合,开销巨大。 - 用 ArrayList 存所有相同元素再取 size():内存占用高,还没发挥哈希查找的优势。
Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。
Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。
Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。
Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等
Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。
Android Studio 是 Google 面向 Android 应用开发提供的官方集成开发环境,以 IntelliJ IDEA 为基础,集成智能代码编辑、Gradle 构建、设备模拟、界面预览、调试测试及性能分析工具,













