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