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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© theNo.1 中级黑马   /  2014-5-11 17:12  /  3142 人查看  /  22 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 theNo.1 于 2014-5-11 17:14 编辑

  在学习集合的时候发现了一个奇怪现象。如下:
发现出现了死循环,一直输出 AAA
但是将 sop(li.next()) 这句注释去掉 ,发现 程序正常打印 al 集合中的数据
由此得出 :
    1 . 在ListIterator 中 , hasNext() 方法,只判断下一个游标位置是否有元素存在,并没有发生游标的移动、
    2 . 移动游标的是 next() 方法, 每移动一次返回一次当前游标的对象。
证明 :   加入一个for循环,循环 集合元素个数+2 次,用hasNext方法判断是否有 元素存在 。

可以看到,结果为true , 可是集合中明明只有四个元素啊。 所以,这充分证明了 使用 hasNext方法 ,游标根本没有发生移动  。

评分

参与人数 2技术分 +1 黑马币 +4 收起 理由
小叔 + 4 赞一个!
轻语。 + 1 善于思考赞一个!

查看全部评分

22 个回复

倒序浏览
恩,证明得比较好
回复 使用道具 举报
钟成军 发表于 2014-5-11 17:28
恩,证明得比较好

:#                                         
回复 使用道具 举报
看完整个了才明白过来,楼楼就是想说只有当it.next时脚标才会浮动,而hasNext只是判断。所以才会出现在缺少it.next的情况下出现死循环。
回复 使用道具 举报
有例子证明更形象化
回复 使用道具 举报
谢谢分享,,,,
回复 使用道具 举报
你放在while里面时它就只是做判断的。
回复 使用道具 举报
小周务商 发表于 2014-5-12 09:34
你放在while里面时它就只是做判断的。

hasNext 本来就是作判断的,不管是在里边还是在外边。 我这里 讨论的主要是在作判断的过程中,指针(游标)是否发生了移动 。从for循环的例子可以看出,指针是没有发生移动的,一直在当前位置
回复 使用道具 举报
GGdog 发表于 2014-5-11 22:03
有例子证明更形象化

必须的 , 哈哈 :P
回复 使用道具 举报
孟凡超 发表于 2014-5-12 07:47
谢谢分享,,,,

谢谢花这么长时间看  ;P
回复 使用道具 举报
嗯,确实是这样子的,证明的太犀利了。
回复 使用道具 举报
楼主挺有探索精神的哟
回复 使用道具 举报
本身那个hasNext  API里面就是说的hasNext是用来判断是否有 请看API:
   boolean hasNext()
如果仍有元素可以迭代,则返回 true。(换句话说,如果 next 返回了元素而不是抛出异常,则返回 true)。

返回:
如果迭代器具有多个元素,则返回 true。
回复 使用道具 举报
不过好像没有讲是否移动哈? 楼主还是挺有探索精神的 赞!刚刚操作失误,就发表了!!
回复 使用道具 举报
楼主挺棒!
回复 使用道具 举报
赞一个!俺咋就没发现呢!!差距吖!
回复 使用道具 举报
证明的不错。。。精神可嘉。。。
回复 使用道具 举报
hasNext方法是在判断当前元素之后是否有下一个元素,如果没有紧接着调用next()方法,当然指针不会移动,返回的就会使TRUE。设想,如果hasNext方法会改动指针,就有可能导致你取出的元素和判断的元素不一致
回复 使用道具 举报
总共四个元素,打印true却成了无限循环,使用 hasNext方法到第五个没元素了怎么迭代的?没有元素了不是应该返回false吗??
回复 使用道具 举报
为梦想而活着 发表于 2014-5-28 11:51
总共四个元素,打印true却成了无限循环,使用 hasNext方法到第五个没元素了怎么迭代的?没有元素了不是应该 ...

所以说啊,hasNext方法迭代的时候,指针永远停留在当前位置,没有发生移动。 而只有用next方法时,才移动了、所以才会永远返回true (当前位置的下一个元素存在) 。你再认真看看帖子就明白我所讲的了
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马