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, 1};
Map<Integer, Integer> frequencyMap = new HashMap<>();
for (int num : array) {
frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1);
}
// 打印结果
for (Map.Entry<Integer, Integer> entry : frequencyMap.entrySet()) {
System.out.println("元素: " + entry.getKey() + ", 出现次数: " + entry.getValue());
}
}
}
方法2:使用Java 8 Stream API
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, 1};
Map<Integer, Long> frequencyMap = Arrays.stream(array)
.boxed()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
// 打印结果
frequencyMap.forEach((key, value) ->
System.out.println("元素: " + key + ", 出现次数: " + value));
}
}
方法3:使用数组(适用于已知范围的小数值)
public class CountDuplicatesArray {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 2, 3, 5, 6, 1, 1};
int max = Arrays.stream(array).max().orElse(0);
int[] countArray = new int[max + 1];
for (int num : array) {
countArray[num]++;
}
// 打印结果
for (int i = 0; i < countArray.length; i++) {
if (countArray[i] > 0) {
System.out.println("元素: " + i + ", 出现次数: " + countArray[i]);
}
}
}
}
方法4:使用TreeMap(自动排序)
import java.util.Map;
import java.util.TreeMap;
public class CountDuplicatesTreeMap {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 2, 3, 5, 6, 1, 1};
Map<Integer, Integer> frequencyMap = new TreeMap<>();
for (int num : array) {
frequencyMap.put(num, frequencyMap.getOrDefault(num, 0) + 1);
}
// 打印结果
frequencyMap.forEach((key, value) ->
System.out.println("元素: " + key + ", 出现次数: " + value));
}
}
注意事项
- 对于大型数组,HashMap方法通常效率最高,时间复杂度为O(n)
- 如果数组元素范围已知且较小,使用数组计数法效率最高
- 如果需要结果按元素排序,可以使用TreeMap
- Java 8的Stream API提供了更简洁的实现方式
选择哪种方法取决于你的具体需求,如数组大小、元素范围以及是否需要排序等。

