Iterator接口中方法的实现.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Iterator接口中方法的实现

遍历器用于遍历Collection, Map没有提供public的遍历器,但是其内部定义了几个private遍历器自用。 简单地说,每个AbstratCollection的子类都有一个iterator()方法,这个方法将返回一个对应容器的遍历器。而AbstractList的子类自有一个listIterator()方法(ArrayList等具体类也提供iterator()方法,从源码中可以知道listIterator()实际上来自iterator()!在下面有详细解释)。(*)通过研究源码可知,Set的Iterator实际上是从Map的内部Iterator获得的(HashSet从HashMap.KeySet私有内嵌类获得,TreeSet从TreeMap.KeySet私有内嵌类获得),之所以这样实现估计是因为Set和Map有同样的性质:不允许重复值。这里暂时不讨论。?????? listIterator()在AbstractList类中实现。AbstractList类中有四个内嵌类:Itr, ListItr, RandomAccessSubList和SubList。与Iterator有关的是Itr和ListItr这两个。Itr和ListItr是两个private内嵌类,Itr的实现如下:private class Itr implements Iterator {?????? //定义一个游标,标示List中元素Index?????? int cursor = 0;?????? //lastRet是最近被访问的元素的index,如果该元素被remove()了,设为-1?????? int lastRet = -1;?????? /**modCount是该List的被修改次数(指结构上的变化,例如size改变),通常在我们一边遍历一边remove()时会发生。注意modCount是transient的,不能被序列化。?????? expectedModCount如果不等于modCount,就说明在遍历过程中List结构改变了*/int expectedModCount = modCount;??? //hasNext()的实现?????? public boolean hasNext() {?????? ??? return cursor != size();? ?????? }??? //next()的实现?????? public Object next() {?????? ??? try {????????????? ?????? Object next = get(cursor);????????????? ?????? checkForComodification();????????????? ?????? lastRet = cursor++;????????????? ?????? return next;?????? ??? } catch(IndexOutOfBoundsException e) {????????????? ?????? checkForComodification();????????????? ?????? throw new NoSuchElementException();?????? ??? }?????? }??? //remove()的实现?????? public void remove() {?????? ??? if (lastRet == -1)????????????? ?????? throw new IllegalStateException();??????? checkForComodification();?????? ??? try {???????????????????? /**AbstractList.remove()将会抛出UnsupportedOperationException,如果????????????? ?????? 如果某个子类允许remove(int)操作的话,必须override此方法。*/AbstractList.this.remove(lastRet); ????????????? ?????? if (lastRet cursor)????????????? ??? ?????? cursor--;????????????? ?????? lastRet = -1;????????????? ?????? expectedModCount = modCount;?????? ??? } catch(IndexOutOfBoundsException e) {????????????? ?????? throw new Concu

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档