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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑庆伟 中级黑马   /  2012-7-6 17:52  /  1805 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郑庆伟 于 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());

}

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

6 个回复

倒序浏览
这一道题你错的原因最主要还是大意了,在你的 sop("hasNext():"+li.hasNext());这句话
执行之前,是不是有一个while的迭代语句,在这句 while(li.hasNext())执行完之后,指针肯定
是在最后面。这道题中你要是把前面的迭代语句去了就会打印你需要的结果了。
回复 使用道具 举报
你说的我理解,这里面的指针指的是什么呢?
回复 使用道具 举报
while(li.hasNext())
  {
   Object obj = li.next();
   if(obj.equals("java02"))
    li.set("java006");
  }//执行完while循环到这已经遍历到集合的结尾了
sop("hasNext():"+li.hasNext());//所以li.hasNext()在这已经是false了
回复 使用道具 举报
这里whlie循环可以理解成是在坐火车,循环结束相当于到了终点站,那么li.hasNext()可以理解成列车员报站可以这样理解吧
回复 使用道具 举报
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集合,他的底层结构是数组结构,集合中的元素并没有存放在他本身里,放的是每个对象的引用。然后根据这些引用找到对象。
不知道这么说你明白吗。
回复 使用道具 举报
楼上的虽然还是有些疑惑但是你说的我基本上明白了,这里的指针应该是比较底层的东西了。我继续看下面的内容了非常感谢。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马