Collections.frequency是Java中统计Collection内某元素出现次数的静态方法,遍历集合并基于equals()比较,返回int型计数;适用于List等允许重复的集合,对Set意义有限;自定义对象需重写equals和hashCode;频繁查询时建议预建HashMap提升性能。

Collections.frequency 是 Java 集合工具类中一个简单但实用的静态方法,专门用于统计某个元素在 Collection 中出现的次数。它内部遍历集合、逐个比较,返回匹配次数(int 类型),无需手动写循环。
基本用法:传入集合和目标元素
方法签名如下:
public static int frequency(Collection> c, Object o)注意两点:
- 第一个参数是任意
Collection(如ArrayList、LinkedList、HashSet等),但不建议对无序且不允许重复的集合(如Set)用它查频次——因为 Set 里每个元素最多出现一次,结果只能是 0 或 1; - 第二个参数是待查找的对象,比较基于
equals()方法,所以确保元素类型正确重写了equals(对自定义对象尤其重要)。
常见使用示例
比如统计字符串列表中 "apple" 出现几次:
Listint count = Collections.frequency(fruits, "apple"); // 返回 3
再比如统计整数列表中数字 5 的频次:
Listint count = Collections.frequency(nums, 5); // 返回 3
对自定义对象使用需重写 equals 和 hashCode
若集合中是自定义类实例,必须重写 equals()(以及配套的 hashCode()),否则默认比较的是引用地址,相同内容的对象也会被判定为不相等。
例如有一个 Person 类,想按姓名统计出现次数:
String name;
int age;
// 构造、getter 省略
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name);
}
}
之后才能正确统计:
Listnew Person("Alice", 25),
new Person("Bob", 30),
new Person("Alice", 28)
);
int aliceCount = Collections.frequency(people, new Person("Alice", 0)); // 返回 2
性能与替代方案提醒
Collections.frequency 时间复杂度是 O(n),每次调用都完整遍历一次集合。如果需要频繁查询多个不同元素的频次,更高效的做法是预先构建 Map(比如用 HashMap 统计所有元素频次),后续查表即可 O(1) 获取。
例如一次性统计全部频次:
Mapfor (String fruit : fruits) {
freqMap.put(fruit, freqMap.getOrDefault(fruit, 0) + 1);
}
这样后续查 "apple" 就只需 freqMap.getOrDefault("apple", 0),避免重复遍历。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











