我正在做一些霍夫曼编码,我希望能够打印频率表。
但是,我尝试了以下代码,并得到了“不兼容的类型:条目无法转换为条目
(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());
}
}
最佳答案
遍历条目集时,指定的值类型与实际哈希图中的条目的值类型不匹配。每个条目的实际值类型是Integer
,但是您当前在for循环中使用类型String
。所以我建议将for循环更改为
for (Map.Entry<Character, Integer> entry : freq.entrySet())
{
System.out.println(entry.getKey() + " " + entry.getValue());
}