黑马程序员技术交流社区
标题:
集合中的小问题
[打印本页]
作者:
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