Java中统计数组中重复元素的个数
在Java中,统计数组中重复元素的个数有多种方法,以下是几种常见的实现方式:

方法1:使用HashMap
import java.util.HashMap;
import java.util.Map;
public class CountDuplicates {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 2, 3, 5, 6, 1, 2};
Map<Integer, Integer> frequencyMap = new HashMap<>();
// 统计每个元素出现的次数
for (int num : array) {
frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1);
}
// 输出重复元素及其出现次数
System.out.println("重复元素及其出现次数:");
for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) {
if (entry.getValue() > 1) {
System.out.println("元素 " + entry.getKey() + ": " + entry.getValue() + " 次");
}
}
}
}
方法2:使用Java 8 Stream
import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public class CountDuplicatesStream {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 2, 3, 5, 6, 1, 2};
Map<Integer, Long> frequencyMap = Arrays.stream(array)
.boxed()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println("重复元素及其出现次数:");
frequencyMap.entrySet().stream()
.filter(entry -> entry.getValue() > 1)
.forEach(entry -> System.out.println("元素 " + entry.getKey() + ": " + entry.getValue() + " 次"));
}
}
方法3:只统计重复元素(不显示具体次数)
如果只需要知道哪些元素是重复的(不关心具体次数):
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class FindDuplicates {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 2, 3, 5, 6, 1, 2};
Set<Integer> uniqueElements = new HashSet<>();
Set<Integer> duplicateElements = new HashSet<>();
for (int num : array) {
if (!uniqueElements.add(num)) {
duplicateElements.add(num);
}
}
System.out.println("重复元素: " + duplicateElements);
}
}
方法4:统计每个元素的出现次数(包括非重复元素)
如果需要统计所有元素的出现次数:
import java.util.HashMap;
import java.util.Map;
public class CountAllOccurrences {
public static void main(String[] args) {
String[] array = {"a", "b", "a", "c", "b", "a", "d"};
Map<String, Integer> countMap = new HashMap<>();
for (String str : array) {
countMap.put(str, countMap.getOrDefault(str, 0) + 1);
}
System.out.println("所有元素及其出现次数:");
countMap.forEach((k, v) -> System.out.println(k + ": " + v));
}
}
注意事项
- 对于基本类型数组(如int[]),需要先转换为包装类型(Integer)才能使用Stream API
- 如果数组很大,考虑使用更高效的数据结构或算法
- 如果需要保留原始顺序,可以考虑使用LinkedHashMap替代HashMap
方法可以根据具体需求选择使用,HashMap方法通常是最通用和高效的解决方案。

