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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 明月几时有 中级黑马   /  2013-11-13 23:52  /  1683 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 明月几时有 于 2013-11-15 01:14 编辑

package cn.itcast.eclipse;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class Demo2 {

        /**
         * @param args
         */
        public static void main(String[] args) {
                Map<String, String>hs=new HashMap<String,String>();
                hs.put("01", "zhangsan");
                hs.put("02", "lisi");
                hs.put("03", "wangwu");
                Set<Map.Entry<String, String>> s=hs.entrySet();
                Iterator<Map.Entry<String, String>>it=s.iterator();
                while(it.hasNext()){
                        Map.Entry<String, String> me=it.next();
                        String key=me.getKey();                               
                        String value=me.getValue();       
                        //String key=it.next().getKey();//把上面三句代码简写成这两句,运行会出异常,不解,求指点!
                        //String value=it.next().getValue();
                        System.out.println(key+" : "+value);
                }
        }
}


评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

9 个回复

倒序浏览
本帖最后由 qw无语 于 2013-11-14 00:29 编辑

楼下说的对,我说错了....
回复 使用道具 举报
楼主抛出的异常时没有这个元素异常:java.util.NoSuchElementException

不知道楼主有没有发现,在异常的上面,还输出了一个:01 : lisi
而对应你的代码来看,你的01键对应的值是zhangsan 而与lisi这个值对应的键是02

这里就需要了解Iterator接口中next()这个方法的作用
这个方法是:返回迭代的下一个元素。

在你注释的代码中,第一句String key=it.next().getKey();调用了一次next(),此时得到的键是01

而在你的下一句代码中,String value=it.next().getValue();这里又调用了一次next(),千万不要认为两个代码只用了一次next()方法

所以,你的第二次调用,将会使指针指向下一个元素。所以这个打印的值是lisi

而当你继续循环的时候,继续调用第一句的next()方法,这时String key=it.next().getKey();这个语句得到的键是03.

而由于没有输出语句,所以这个键没有输出。接下来程序走到下一句代码中String value=it.next().getValue();这个next()方法

将使指针继续向后移动,而你要知道,你得到上面的键03的时候,已经是最后一个元素了。所以继续向后寻找,将找不到任何元素。

所以系统在打印出01:lisi 之后,抛出异常java.util.NoSuchElementException

希望能看懂,不懂再问我。

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报 2 0
起猿 发表于 2013-11-14 00:23
楼主抛出的异常时没有这个元素异常:java.util.NoSuchElementException

不知道楼主有没有发现,在异常的上 ...

太感谢你啦,回答的真好,还运行了代码,我看懂了,我的两个it.next()不是同步的
回复 使用道具 举报
明月几时有 发表于 2013-11-14 02:18
太感谢你啦,回答的真好,还运行了代码,我看懂了,我的两个it.next()不是同步的 ...

嘿嘿,可惜没有分呀
回复 使用道具 举报
起猿 发表于 2013-11-14 20:49
嘿嘿,可惜没有分呀

擦 为嘛没分···回答挺好的啊
回复 使用道具 举报
FFF 金牌黑马 2013-11-14 23:51:50
7#
起猿 发表于 2013-11-14 20:49
嘿嘿,可惜没有分呀

淡定~昨晚都在听课呢~可能版主没有看到,我现在给你加上!
回复 使用道具 举报
起猿 中级黑马 2013-11-15 00:10:48
8#
FFF 发表于 2013-11-14 23:51
淡定~昨晚都在听课呢~可能版主没有看到,我现在给你加上!

特别淡定,一没分就感觉自己回答的错误,就赶紧查阅相关知识点。嘿嘿
回复 使用道具 举报
FFF 发表于 2013-11-14 23:51
淡定~昨晚都在听课呢~可能版主没有看到,我现在给你加上!

大快人心,我就知道一定是版主太忙了,没看到:lol
回复 使用道具 举报
起猿 发表于 2013-11-15 00:10
特别淡定,一没分就感觉自己回答的错误,就赶紧查阅相关知识点。嘿嘿

这下有了吧,你答的那么好,看到没给分,我都惭愧了:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马