Java 迭代器 Iterator

  1. Collection接口实现了继承了Iterable接口,实现类例如ArrayList可以调用 iterator() 方法获取迭代器Iterator 对象。
  2. Iterable 是一个接口(英文翻译为可被迭代的),返回了具体的迭代器对象 Iterator。
  1. Collection的实现类们将迭代器作为一个内部类在类中进行了实现,JDK源码中大量运用了这种内部类实现的方式去代理,很好的阐释了封装的概念。
    1. 以ArrayList为例,Iterator的实现类就是Itr。
  2. Iterator的实现(以ArrayList的Itr为例):
    1. Iterator 会保存当前的元素在数组中的下标(int cursor,默认0),以及上一个元素在数组中的下标(int lastRet,默认-1)。
    2. next方法:
      1. 根据cursor提供的下标+1获取下一个元素并返回(当数组中还有元素时)。
      2. 获取elementData的数组地址的引用,elementData属性就是ArrayList保存数据的数组属性。
      3. 最后将cursor+1赋值给cursor,将原来的cursor即i赋值给lastRet。
    3. remove方法:
      1. 根据lastRet删除上一个元素,并且迭代器是没有一个集合的数组的拷贝的,调用集合的remove()方法真实删除当前集合里的元素
      2. 迭代器的remove方法调用集合的remove(),删除元素后会对数组重新排序,因此可以在迭代器循环中边循环边删除上一个元素,因为每次迭代找元素靠的还是下标而不是元素本身。

# 留言:老婆做了一个小红书账号,全是瓷砖方面的干货,大佬们如果有需求或者有兴趣可以移步了解一下,嘻嘻~

小红书地址 GO GO GO ! ! !

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值