Collections.frequency()用于统计Collection中某元素出现次数,基于equals()比较,时间复杂度O(n),适用于List、Set等,不支持数组和Stream。

在 Java 中,Collections.frequency() 是一个简单却实用的工具方法,用于统计集合中某个元素出现的次数。它适用于 List、Set 等所有实现了 Collection 接口的类型,底层通过遍历比较实现,无需手动写循环。
基本用法:传入集合与目标元素
该方法签名如下:
public static int frequency(Collection> c, Object o)
只需提供待查集合和要统计的对象(支持 null),返回整型计数值。注意:比较基于 equals() 方法,因此目标对象需与集合中元素类型兼容且正确重写 equals()(对自定义类尤其重要)。
- 对
String、Integer等内置类型,开箱即用 - 若集合含
null,可直接传null统计空值个数 - 若元素类型不匹配(如用
Long查Integer),因equals()返回false,结果为 0
常见使用场景示例
比如统计用户操作日志中某类行为的触发频次:
List<string> actions = Arrays.asList("click", "scroll", "click", "submit", "click");<br>int clickCount = Collections.frequency(actions, "click"); // 返回 3</string>再如分析订单状态分布:
List<orderstatus> statuses = List.of(SUCCESS, FAILED, SUCCESS, PENDING, SUCCESS);<br>int successCount = Collections.frequency(statuses, SUCCESS); // 假设 SUCCESS 是枚举常量</orderstatus>
注意事项与替代建议
虽然方便,但 Collections.frequency() 时间复杂度为 O(n),每次调用都全量扫描。若需频繁统计多个不同元素,效率较低。
- 单次查询少量元素:推荐直接使用,代码简洁清晰
- 批量统计全部元素频次:改用
Map+ 循环,或 Java 8+ 的Collectors.groupingBy()配合Collectors.counting() - 对大型不可变集合且查询频繁:可预先构建频次映射表,避免重复遍历
不适用于数组或流式数据
该方法只接受 Collection,不能直接处理普通数组或 Stream。如需对数组使用,先转为 List(例如 Arrays.asList(arr),注意基本类型数组需先装箱);对流则应使用 filter().count() 或分组收集。










