📜  在Java使用 LinkedHashMap 按出现顺序打印字符及其频率(1)

📅  最后修改于: 2023-12-03 14:51:17.754000             🧑  作者: Mango

在Java使用 LinkedHashMap 按出现顺序打印字符及其频率

在Java中,LinkedHashMap是一种具有顺序的HashMap。它维护了一个插入顺序的双向链表,在遍历Map时,可以按照插入顺序输出。

下面是一个示例代码,展示如何使用LinkedHashMap按出现顺序打印字符及其频率。

实现思路
  1. 遍历输入字符串,统计每个字符出现的次数,并存储到Map中。
  2. 将Map转成List,并按照value值(即出现次数)进行降序排序。
  3. 遍历排序后的List,按照插入顺序打印字符及其频率。
代码实现
import java.util.*;

public class LinkedHashMapDemo {

    public static void main(String[] args) {
        String input = "abbcccccdeee";
        Map<Character, Integer> map = new LinkedHashMap<>();

        // 统计字符出现次数
        for (char ch : input.toCharArray()) {
            map.put(ch, map.getOrDefault(ch, 0) + 1);
        }

        // 将Map转成List,并按照value值排序
        List<Map.Entry<Character, Integer>> list = new ArrayList<>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() {
            @Override
            public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
                return o2.getValue().compareTo(o1.getValue());
            }
        });

        // 打印字符及其出现次数
        for (Map.Entry<Character, Integer> entry : list) {
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }
    }

}
代码解析
  1. 第4行创建一个LinkedHashMap,用于存储字符及其对应的出现次数。
  2. 第8-10行遍历输入字符串,统计每个字符出现的次数,并存储到Map中。这里使用了Map的getOrDefault方法,可以简化代码。
  3. 第14-20行将Map转成List,并按照value值进行排序,这里使用Collections.sort方法和匿名内部类实现比较器。
  4. 第24-26行遍历排序后的List,按照插入顺序打印字符及其出现次数。
总结

使用LinkedHashMap按照插入顺序输出字符及其出现次数非常方便,通过这个示例,可以学习到Java中常用的Map、List等数据结构,并加深对匿名内部类、Comparator等知识的理解。