黑马程序员技术交流社区

标题: 迭代器问题 [打印本页]

作者: 郑庆伟    时间: 2012-7-6 17:52
标题: 迭代器问题
本帖最后由 郑庆伟 于 2012-7-6 18:37 编辑

import java.util.*;

class CollectionDemo
{
public static void sop(Object obj)
{
  System.out.println(obj);
}

public static void main(String[] args)
{


  ArrayList al = new ArrayList();
  al.add("java01");
  al.add("java02");
  al.add("java03");
  al.add("java04");
  ListIterator li = al.listIterator();
  
  while(li.hasNext())
  {
   Object obj = li.next();
   if(obj.equals("java02"))
    li.set("java006");
  }
  sop("hasNext():"+li.hasNext());//为什么输出是false,hasNext():不是从集合中开头开始吗?毕老师讲迭代器遍历结束后指针在最后一个元素后面,所以才为fale,                            //那么hasNext()跟迭代器的遍历有什么关系?
  sop("hasPreViouse()"+li.hasPrevious());

}

作者: 杨朔    时间: 2012-7-6 18:05
这一道题你错的原因最主要还是大意了,在你的 sop("hasNext():"+li.hasNext());这句话
执行之前,是不是有一个while的迭代语句,在这句 while(li.hasNext())执行完之后,指针肯定
是在最后面。这道题中你要是把前面的迭代语句去了就会打印你需要的结果了。
作者: 郑庆伟    时间: 2012-7-6 18:17
你说的我理解,这里面的指针指的是什么呢?
作者: 李伟    时间: 2012-7-6 18:17
while(li.hasNext())
  {
   Object obj = li.next();
   if(obj.equals("java02"))
    li.set("java006");
  }//执行完while循环到这已经遍历到集合的结尾了
sop("hasNext():"+li.hasNext());//所以li.hasNext()在这已经是false了
作者: 郑庆伟    时间: 2012-7-6 18:22
这里whlie循环可以理解成是在坐火车,循环结束相当于到了终点站,那么li.hasNext()可以理解成列车员报站可以这样理解吧
作者: 万宝东    时间: 2012-7-6 18:27
while(li.hasNext())             //这个循环结束了,迭代器就指向最后一个元素的后面了。所以你下面的的sop("hasNext():"+li.hasNext()); 这句话是false。
   {
    Object obj = li.next();
    if(obj.equals("java02"))
     li.set("java006");
   }
   sop("hasNext():"+li.hasNext());

还有就会你问的指针是什么?这个问题呢 。。。
java中是没有指针的,在java中那个叫做引用。类似于C中的指针。因为迭代器操作的是List集合,他的底层结构是数组结构,集合中的元素并没有存放在他本身里,放的是每个对象的引用。然后根据这些引用找到对象。
不知道这么说你明白吗。
作者: 郑庆伟    时间: 2012-7-6 18:34
楼上的虽然还是有些疑惑但是你说的我基本上明白了,这里的指针应该是比较底层的东西了。我继续看下面的内容了非常感谢。




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