打印霍夫曼频率表

时间:2019-05-01 03:10:13

标签: java huffman-code

我正在做一些霍夫曼编码,我希望能够打印频率表。

但是,我尝试了以下代码,并得到了“不兼容的类型:条目无法转换为条目         (Map.Entry条目:freq.entrySet())的错误。有没有一种方法可以解决此问题,使其能够显示频率表,而该频率表将以表格或类似数组的形式而不是映射形式出现?

public static void buildHuffmanTree(String text)
{   // count frequency each character and store it in a map
    Map<Character, Integer> freq = new HashMap<>();
    for (int i = 0 ; i < text.length(); i++)
    {
        if (!freq.containsKey(text.charAt(i)))
        {
            freq.put(text.charAt(i), 0);
        }
        freq.put(text.charAt(i), freq.get(text.charAt(i)) + 1);
    }

    // Create a priority queue to store nodes of Huffman tree
    // Notice that highest priority item has lowest frequency
    PriorityQueue<Node> pq = new PriorityQueue<>((l, r) -> l.freq - 
    r.freq);

    for (Map.Entry<Character, String> entry : freq.entrySet())
    {
        System.out.println(entry.getKey() + " " + entry.getValue());
    }
}

1 个答案:

答案 0 :(得分:0)

遍历条目集时,指定的值类型与实际哈希图中的条目的值类型不匹配。每个条目的实际值类型是Integer,但是您当前在for循环中使用类型String。因此,我建议将for循环更改为

for (Map.Entry<Character, Integer> entry : freq.entrySet())
{
    System.out.println(entry.getKey() + " " + entry.getValue());
}