如何调整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
相关产品推荐
相关产品推荐

