杰瑞科技汇

Java数组中如何统计重复元素个数?

Java中统计数组中重复元素的个数

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

Java数组中如何统计重复元素个数?-图1
(图片来源网络,侵删)

方法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));
    }
}

注意事项

  1. 对于基本类型数组(如int[]),需要先转换为包装类型(Integer)才能使用Stream API
  2. 如果数组很大,考虑使用更高效的数据结构或算法
  3. 如果需要保留原始顺序,可以考虑使用LinkedHashMap替代HashMap

方法可以根据具体需求选择使用,HashMap方法通常是最通用和高效的解决方案。

Java数组中如何统计重复元素个数?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇