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!这是我的第一篇随笔,经验在于积累,后续再写点和工作有关的吧!