黑马程序员技术交流社区

标题: 集合中的小问题 [打印本页]

作者: zc332750    时间: 2014-2-10 10:06
标题: 集合中的小问题
本帖最后由 zc332750 于 2014-2-10 10:09 编辑

import java.util.HashMap; import java.util.Iterator;
    public class MapTest  {
          public static void main(String[] args)  {
               HashMap map = new HashMap();
               map.put("a", "zhangsan");
               map.put("b", "lisi");
               map.put("d", "wangwu");
               map.put("e", "zhaoliu");
                map.put("f", "yangqi");
              for(Iterator iter = map.keySet().iterator();iter.hasNext();)  {
                   System.out.println(iter.next());
                  System.out.println( map.get(iter.next()));
               }
    } 中的
System.out.println(iter.next());  System.out.println( map.get(iter.next()));
如果注释一行运行一行都能成功,两个放一起就不成功了,为什么,求高手指点

作者: 郭运川    时间: 2014-2-10 12:55
你出现错误的情况是因为:没调用一次iter.next(),都会输出一次,你for中如果输出两次的话,就相当于一次性的输出了两个对象,但是在判断时iter.hasNext();只能判断一次下一个是否为空 ,所以当集合中有奇数个对象时,最后一次判断时,集合中还有一个对象没有获取,但是在执行for语句时,剩下的那个对象只能满足一个iter.next(),而第二个iter.next()没有对象可以调用,因此返回错误

for(Iterator iter = map.keySet().iterator();iter.hasNext();)  {
                   System.out.println(iter.next());
                  System.out.println( map.get(iter.next()));
               }

你可以自己定义六个对象试一试
map.put("a", "zhangsan");
               map.put("b", "lisi");
               map.put("d", "wangwu");
               map.put("e", "zhaoliu");
                map.put("f", "yangqi");
                map.put("g","haha");
作者: 1453149997    时间: 2014-3-29 10:30
问题出在下面的代码里:
System.out.println(iter.next());
System.out.println( map.get(iter.next()));
每调用一次next方法,指针都会移动一次;你每循环一次,指针就移动两次,导致指针越界,因为正常情况下是循环一次,指针移动一次,循环次数和指针移动次数应该相同





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2