You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中按出现频率输出ArrayList的元素及其次数

Java实现方案

方法1:TreeMap通用实现(兼容JDK 1.6及以上版本)

核心思路:利用TreeMap天然支持Key的自然排序特性,无需额外排序即可匹配输出要求的字母升序规则,遍历列表统计次数后直接输出即可。

import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;

public class ElementCount {
    public static void main(String[] args) {
        // 初始化目标ArrayList
        ArrayList<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("D");
        list.add("E");
        list.add("C");
        list.add("A");
        list.add("A");
        list.add("B");

        Map<String, Integer> countMap = new TreeMap<>();
        // 统计元素出现次数
        for (String element : list) {
            // JDK8及以上可用getOrDefault写法
            countMap.put(element, countMap.getOrDefault(element, 0) + 1);
            
            // JDK8以下版本替换为以下逻辑
            /*
            if (countMap.containsKey(element)) {
                countMap.put(element, countMap.get(element) + 1);
            } else {
                countMap.put(element, 1);
            }
            */
        }

        // 按要求格式输出
        for (Map.Entry<String, Integer> entry : countMap.entrySet()) {
            System.out.println(entry.getKey() + "," + entry.getValue());
        }
    }
}

方法2:Stream流式实现(JDK8及以上版本,写法更简洁)

核心思路:直接通过Stream的分组聚合能力,指定用TreeMap存储结果,一步完成统计和排序,流式输出结果。

import java.util.ArrayList;
import java.util.TreeMap;
import java.util.stream.Collectors;

public class ElementCountStream {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("D");
        list.add("E");
        list.add("C");
        list.add("A");
        list.add("A");
        list.add("B");

        // 流式统计、排序并输出
        list.stream()
                .collect(Collectors.groupingBy(
                        element -> element,
                        TreeMap::new,
                        Collectors.counting()
                ))
                .forEach((key, count) -> System.out.println(key + "," + count));
    }
}

两种实现的输出结果完全符合要求:

A,3
B,2
C,1
D,1
E,1

内容的提问来源于stack exchange,提问作者hans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:27:02