A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马振鹏 中级黑马   /  2012-7-14 19:02  /  1490 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.*;
public class MapDemo2 {
        public static void main(String[] args) {
                Map<String,String> map = new HashMap<String,String>();
                map.put("01","dandan01");
                map.put("02","dandan02");
                map.put("03","dandan03");
                map.put("04","dandan04");
                map.put("05","dandan05");
                Set<Map.Entry<String, String>> entryset = map.entrySet();
                Iterator<Map.Entry<String, String>> it1 = entryset.iterator();
                while(it1.hasNext()){
                String key1 = it1.next().getKey();
                        String value1 = it1.next().getValue();
                        //System.out.println("key: "+key1+" value: "+value1);
                        System.out.println("key:"+key1);
                        System.out.println("value:"+value1);
                }               
        }
}

提示异常:Exception in thread "main" java.util.NoSuchElementException。分开只打印key和value并没有问题,如果一起打印就会异常。
getKey().和getValue()含有特殊含义?

2 个回复

倒序浏览
it1.next()会得到当前的Entry并把指针向后挪一个位置
你这样写一次移动了2个位置,改成这样就行:

  1. Entry<String,String> entry = it1.next();
  2. String key1 = entry.getKey();
  3. String value1 = entry.getValue();
  4. System.out.println("key: "+key1+" value: "+value1);
复制代码
回复 使用道具 举报
  1.         public static void main(String[] args) {
  2.                 Map<String, String> map = new HashMap<String, String>();
  3.                 map.put("01", "dandan01");
  4.                 map.put("02", "dandan02");
  5.                 map.put("03", "dandan03");
  6.                 map.put("04", "dandan04");
  7.                 map.put("05", "dandan05");
  8.                 Set<Map.Entry<String, String>> entryset = map.entrySet();
  9.                 Iterator<Map.Entry<String, String>> it1 = entryset.iterator();
  10.                 while (it1.hasNext()) {
  11.                         /**
  12.                          * 注意:在使用迭代器的时候,循环中只使用一次it.next()方法,因为你调用一次该方法,再调用一次,两次的返回结果是不同的。
  13.                          */
  14.                         Map.Entry<String, String> t = it1.next();
  15.                         String key1 = t.getKey();
  16.                         String value1 = t.getValue();
  17.                         System.out.println("key: "+key1+" value: "+value1);
  18.                         //下面两行没有错,只是影响控制台输出结果不容易观察,故注释。
  19.                         //System.out.println("key:" + key1);
  20.                         //System.out.println("value:" + value1);
  21.                 }
  22.         }
复制代码
与getKey().和getValue()没有关系,只是迭代器的使用陷阱没有注意。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马