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!這是我的第一篇隨筆,經驗在於積累,后續再寫點和工作有關的吧!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2024 CODEPRJ.COM