Hashmap NoSuchElementException错误

时间:2013-04-02 12:47:54

标签: java foreach hashmap hashset

执行printAll时,我一直在努力解决java.util.NoSuchElementException错误。

public class myDatabase {

    Map<String, HashSet<Integer>> mapOfSets = new HashMap<String, HashSet<Integer>>();

    void printAll() {

        if (mapOfSets.isEmpty() == false)
        {
                for (String key : mapOfSets.keySet()) 
                {
                    System.out.println(key);

                    //print the set
                    for (HashSet<Integer> id : mapOfSets.values() ) 
                        System.out.println(id);
                }
        }

}

//其余的空代码...

评论更新:例外

java.util.NoSuchElementException 
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:809) 
at java.util.HashMap$KeyIterator.next(HashMap.java:841) 
at StudentDatabase.report(myDatabase.java:29) 
at DatabaseRun1.main(DatabaseRun1.java:52)

2 个答案:

答案 0 :(得分:1)

如果我了解您要做的事情,那么您最好使用entrySet

for(Map.Entry<String, HashSet<Integer>> entry : mapOfSets.entrySet()) {
    String key = entry.getKey();
    HashSet<Integer> value = entry.getValue();

    // Print it
}

我看不出这段代码如何产生NoSuchElementException

答案 1 :(得分:0)

你应该改变:

                for (HashSet<Integer> id : mapOfSets.values() ) 
                    System.out.println(id);

      for (Integer i : mapOfSets.get(key)) {
        System.out.println(i);
      }

或(正如@JonSkeet指出的那样)

       System.out.println(mapOfSets.get(key));

基本上,您正在尝试在关键位置打印地图而不是地图内的设置。