java.util.NoSuchElementException异常原因

 1 package 集合框架;
 2 
 3 ;import java.util.HashMap;
 4 import java.util.Iterator;
 5 
 6 /**
 7  * 反转key-value
 8  * https://github.com/confidentljw
 9  *
10  * @author Mr.Luo
11  * @author 2017-07-14 10:56
12  */
13 public class HashMapReverse {
14     public static void main(String []args){
15         HashMap<String,String> hashMap=new HashMap<>();
16         hashMap.put("adc","物理英雄");
17         hashMap.put("apc","法师英雄");
18         hashMap.put("t","坦克");
19         Iterator iterator=hashMap.keySet().iterator();
20         while (iterator.hasNext()){
21             String key= (String) iterator.next();
22             String values= (String) iterator.next();
23            System.out.println("初始化后的map:");
24             System.out.println(key);
25             System.out.println(values);
26         }
27     }
28 }

由于个人java基础较生疏,所以最近一直在练习基础知识。练习过程中难免会有些错误信息,借此博客记录我的工作、学习经验吧!回到正题代码中第21和22行分别使用了迭代器的next()方法,运行结果出现:

java.util.NoSuchElementException
    at java.util.HashMap$HashIterator.nextNode(HashMap.java:1439)
    at java.util.HashMap$KeyIterator.next(HashMap.java:1461)
    at 集合框架.HashMapReverse.main(HashMapReverse.java:22)

通过定位源码解释:如果迭代器没有更多的元素,就会抛出该异常!该标注的两行代码同一个迭代器我使用了两遍,最终取值是hashMap的键,并未得到想要的键值对所以这种写法不符合初衷,解决该错误iterator.next()只能用一次,就不会出现该异常了。修正代码反转遍历键值如下:

 

 1 package 集合框架;
 2 
 3 ;import java.util.HashMap;
 4 import java.util.Iterator;
 5 import java.util.Map;
 6 import java.util.Set;
 7 
 8 /**
 9  * 反转key-value
10  * https://github.com/confidentljw
11  *
12  * @author Mr.Luo
13  * @author 2017-07-14 10:56
14  */
15 public class HashMapReverse {
16     public static void main(String []args){
17         HashMap<String,String> hashMap=new HashMap<>();
18         //用于反转
19         HashMap<String,String> temp=new HashMap<>();
20         hashMap.put("adc","物理英雄");
21         hashMap.put("apc","法师英雄");
22         hashMap.put("t","坦克");
23         Iterator<Map.Entry<String, String>> iterator = hashMap.entrySet().iterator();
24         while (iterator.hasNext()){
25             Map.Entry entry=iterator.next();
26             String key= (String) entry.getKey();
27             String values= (String) entry.getValue();
28             System.out.print("初始化后的map:");
29             System.out.println(key+"="+values);
30         }
31         Set<String> keys=hashMap.keySet();
32         for (String key : keys) {
33             String value=hashMap.get(key);
34             temp.put(value,key);
35         }
36         hashMap.clear();
37         hashMap.putAll(temp);
38         System.out.println("反转后的Map:");
39         System.out.println(hashMap);
40     }
41 }

 

先Know how,再Know why!这是我的第一篇随笔,经验在于积累,后续再写点和工作有关的吧!

 

posted @ 2017-07-14 14:44  java_没有然后  阅读(7738)  评论(0编辑  收藏  举报