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

如何调整HashMap输出顺序,使结果从{a=8,b=4,c=3}变为{a=8,c=3,b=4}

解决HashMap统计字符次数时的输出顺序问题

HashMap是无序集合,它的输出顺序不固定,不会遵循插入顺序或其他特定规则。你需要的输出顺序对应字符在原字符串中的首次出现顺序,可以通过以下两种方式调整:

方案一:用LinkedHashMap维护插入顺序

LinkedHashMap会保留键的插入顺序,替换原代码中的HashMap即可直接得到预期输出:

String value = "aaaaacccbbbbaaa";
// 替换HashMap为LinkedHashMap,维护插入顺序
LinkedHashMap<Character, Integer> hashdata = new LinkedHashMap<>();
         
char[] data = value.toCharArray();
for (char c : data) {
    // 用getOrDefault简化原有的containsKey判断逻辑
    hashdata.put(c, hashdata.getOrDefault(c, 0) + 1);
}

System.out.println(hashdata);

运行后输出:{a=8, c=3, b=4}

方案二:手动指定输出顺序(不更换Map类型)

如果必须使用HashMap,可以自定义输出顺序,手动遍历指定的键序列并拼接结果:

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String value = "aaaaacccbbbbaaa";
        HashMap<Character, Integer> hashdata = new HashMap<>();
         
        char[] data = value.toCharArray();
        for (char c : data) {
            hashdata.put(c, hashdata.getOrDefault(c, 0) + 1);
        }

        // 按指定顺序遍历键并拼接输出
        StringBuilder sb = new StringBuilder("{");
        List<Character> outputOrder = Arrays.asList('a', 'c', 'b');
        for (int i = 0; i < outputOrder.size(); i++) {
            char key = outputOrder.get(i);
            sb.append(key).append("=").append(hashdata.get(key));
            if (i != outputOrder.size() - 1) {
                sb.append(", ");
            }
        }
        sb.append("}");
        System.out.println(sb);
    }
}

运行后同样输出:{a=8, c=3, b=4}

内容的提问来源于stack exchange,提问作者pradeep kumara.v

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:13:13