我有一个处理霍夫曼树的任务。我的教授提到我们应该使用HashMap,但没有解释它们。我已经了解了他们,但我在我的代码中遇到了问题。这些是我得到的错误消息。
n00832607.java:542: error: incompatible types
for(Map.Entry e : charCounts.entrySet())
^
required: Entry
found: Object
n00832607.java:610: error: incompatible types
for(Map.Entry entry : codeTable.entrySet())
^
required: Entry
found: Object
所以我可以说它希望它返回一个条目,但我不确定如何处理它。我应该把它作为某种东西吗?
这是我的代码。
//Beging Huffman Class
class Huffman{
Tree tree;
TreeMap codeTable;
protected HashMap calculateFrequency(String message)
{
int messageLength = message.length();
char ch;
int count;
HashMap charCounts = new HashMap();
for(int i = 0; i< messageLength; i++)
{
ch = message.charAt(i);
if(charCounts.containsKey(ch))
{
count = (int) charCounts.get(ch);
++count;
charCounts.put(ch, count);
}
else
{
charCounts.put(ch, 1);
}
}
//end for
return charCounts;
}
//end calculateFrequency
protected void createHuffmanTree(String message)
{
HashMap charCounts = calculateFrequency(message);
PriorityQueue trees = new PriorityQueue();
Tree temp;
for(Map.Entry e : charCounts.entrySet())
{
temp = new Tree((char)e.getKey(), (int)e.getValue());
trees.add(temp);
}
while(trees.size() > 1)
{
temp = new Tree((Tree)trees.remove(), (Tree)trees.remove());
trees.add(temp);
}
tree = (Tree)trees.remove();
}
//end createHuffmanTree
//Begin displayCodeTable
public void displayCodeTable()
{
System.out.println("Character Code");
for(Map.Entry entry : codeTable.entrySet())
{
char key = (char)entry.getKey();
System.out.println(key + "" + entry.getValue());
}
}
//End displayCodeTable
答案 0 :(得分:1)
只是花哨的新Java语法(从Java 5或6开始,我忘了)不是非常友好的。
在过去,你必须这样做:
TreeMap map = new TreeMap();
Iterator itr = map.entrySet().iterator();
while (itr.hasNext())
{
E thing = (E)itr.next();
}
您可以通过使用&lt;,&gt;键入TreeMap并使用keySet()而不是entrySet()来解决此问题。
那就是:
TreeMap map = new TreeMap<String, String>(); (or whatever types you're mapping)
如果您想快速修复,请使用:
for (Object o : map.entrySet()) {
Map.Entry me = (Map.Entry)o;
}
答案 1 :(得分:1)
使用泛型指定集合中使用的键和值的类型。例如
HashMap&lt;字符,整数&gt;
是将字符映射到整数的字符串。您不能在泛型中使用基本类型(int,char,long,short,byte),因此请使用类包装器(Integer,Character,Long,Short,Byte)。