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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 白_蓝(八公) 于 2013-7-12 17:38 编辑

                Set<Integer> keyset =al.keySet();  //al为Map集合

                Iterator<Integer> it = keyset.iterator();
                while(it1.hasNext())  //毕老师的“常规写法”
                {
                        int i = it.next();
                        System.out.println("key:"+i+"-------"+"value"+hsm.get(i));
                }
                for(Integer i : hsm.keySet())
                {
                        System.out.println(i+"----"+hsm.get(i));
                }

而在while循环中 ,我觉得it.next()是指向了key ,也就是集合中的键,刚开始我是直接这么写--System.out.println("key:"+it.next()+"-------"+"value"+hsm.get(it.next()));

不过提示报错  所以上网找了下资料  都有正确的写法  不过就是没有解释  所以想请教下是怎么回事~~~~

而在高级for循环中,个人理解是Integer i  实现了        int i = it.next();这一步,所以直行通过了!如果没理解错的话,最后还是回归到上述的那个问题,求解答

4 个回复

正序浏览
薛淑凯 发表于 2013-7-12 17:24
楼上正解,调用一次next指针就向后移动一位,当剩下最后一个元素的时候hasnext返回还是true,你只能next一 ...

哦哦!hsm是MAP的一个对象  调用了get方法取里面的value   我没有标注出来!!

谢谢你哈~刚才一个朋友的回答让我回忆起来了~只是昨天做练习的时候纠结了下!~就愣住了·
回复 使用道具 举报
楼上正解,调用一次next指针就向后移动一位,当剩下最后一个元素的时候hasnext返回还是true,你只能next一次,再next就出错了。而且你这样取出来的键和值没有了对应关系,刚好错开了,毕老师的视频有讲到。还有一点,你从al取的键集合,为什么拿着这个键去对另一个集合使用get呢
回复 使用道具 举报
草貌路飞 发表于 2013-7-12 17:03
因为System.out.println("key:"+it.next()+"-------"+"value"+hsm.get(it.next()));中执行了再次next();一 ...

你的意思是每次循环都只能执行一次next()咯?

而且我想起没执行一次next()角标都会自动后移一次,也就是说如果一个循环中出现了两次next()的话,其实对应的键已经不是我们需要的那个键了
回复 使用道具 举报
因为System.out.println("key:"+it.next()+"-------"+"value"+hsm.get(it.next()));中执行了再次next();一般情况下每次循环中只会出现一次next,否则集合中的元素个数为奇数时,第二个next就找不到元素了,就会出错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马