0

我编写了代码来查找 HashMap 中的唯一变量,但它似乎不起作用?我希望能够打印每种香肠类型的频率。

    if(sausagesEaten.isEmpty()) { //if the HashMap is empty
        System.out.println("No sausages have been eaten");
        System.out.println("======================================================="); ; 
    }
    else{
        HashMap<ArrayList, String> sausagesEaten = new HashMap<ArrayList, String>();
        for (String key : sausagesEaten) {
              System.out.println(key + ": " + Collections.frequency(saustype, key));
        }
        System.out.println(" ");
    }
4

2 回答 2

0

您不能直接迭代 a HashMap。以下是您可以执行的操作:

Map<K,V> map = new HashMap<K,V>(); // whatever K and V are

for (K key : map.keySet())
{
    // iterates over all the keys in random order
}

for (V value : map.values())
{
    // iterates over all the values, in random order
}

此外,使用可变对象(例如 anArrayList作为映射的键)是非常不正统和危险的,如

HashMap<ArrayList, String> sausagesEaten = new HashMap<ArrayList, String>();

将其放入地图后,如果以任何方式修改其内容,都会破坏地图,并且可能无法检索它。我想你的意思是

HashMap<String, ArrayList> sausagesEaten = new HashMap<String, ArrayList>();

sausagesEaten此外,在您的代码中,您在子句中重新声明else,隐藏同名的成员变量。

于 2012-12-15T02:03:06.270 回答
0

假设您的代码中已经有一个名为 sausagesEaten 的填充 HashMap。

改变:

 if(sausagesEaten.isEmpty()) { //if the HashMap is empty
    System.out.println("No sausages have been eaten");
    System.out.println("======================================================="); ; 
}
else{
    HashMap<ArrayList, String> sausagesEaten = new HashMap<ArrayList, String>();
    for (String key : sausagesEaten) {
          System.out.println(key + ": " + Collections.frequency(saustype, key));
    }
    System.out.println(" ");
}

至:

 if(sausagesEaten.isEmpty()) { //if the HashMap is empty
    System.out.println("No sausages have been eaten");
    System.out.println("======================================================="); ; 
}
else{
    for (String key : sausagesEaten) {
          System.out.println(key + ": " + Collections.frequency(saustype, key));
    }
    System.out.println(" ");
}

通过重新声明变量,它是本地范围并自动为空。

编辑:为正确的迭代添加了更改。

Iterator it = sausagesEaten.entrySet().iterator();
while (it.hasNext()) {
    Map.Entry pairs = (Map.Entry)it.next();
    System.out.println(pairs.getKey() + " = " + pairs.getValue());
}
于 2012-12-14T17:55:46.403 回答