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