迭代器

迭代器

Iterator

定义

public interface Iterator<E>

常用方法及原理

迭代器是一个指向元素中间位置的指针,N个元素有N+1个合法的迭代器位置:

y9sxBT.png

注:以下的叙述按照Java方法的语义,对于Next的方向,右边是“前”,左边是“后”。对于Previous方向,左边是“前”,右边是“后”

boolean hasNext()

原则:判断能不能向“前”移动

判断能不能向右移动一个位点

E next()

原则:向“前”移动,返回“后”面的元素

将迭代器向右移动一个位点,并返回该位点左边的元素,如果移动超出位点范围会抛出NoSuchElementException异常

default void remove()

原则:remove永远删掉“后”面的元素

删除当前位点左边的元素,删除的元素内容不能为空,否则会抛出IllegalStateException异常

常用如下写法遍历:
while(iterator.hasNwxt()){
	iterator.next()
}

ListIterator

定义

public interface ListIterator<E>

常用方法及原理

跟Iterator一样,N个元素有N+1个合法的迭代器位置:

y9sxBT.png

注:以下的叙述按照Java方法的语义,对于Next的方向,右边是“前”,左边是“后”。对于Previous方向,左边是“前”,右边是“后”

注:ListIterator继承Iterator的所有方法

boolean hasPrevious()

原则:判断能不能向“前”移动

判断能不能向左移动一个位点

E previous()

原则:向“前”移动,返回“后”面的元素

将迭代器向左移动一个位点,并返回该位点右边的元素,如果移动超出位点范围会抛出NoSuchElementException异常

default void remove()(重写)

原则:remove永远删掉“后”面的元素

如果前一个操作是next,则删除当前位点左边的元素。如果前一个操作是previous,则删除当前位点右边的元素。删除的元素内容不能为空,否则会抛出IllegalStateException异常

void set(E e)

原则:set永远修改“后”面的元素

如果前一个操作是next,则修改当前位点左边的元素。如果前一个操作是previous,则修改当前位点右边的元素。修改的元素内容不能为空,否则会抛出NoSuchElementException异常

void add(E e)

原则:add永远在左边增加元素

在当前位点左边增加元素

长度变化的原则

removeadd方法会改变长度,导致各个元素的下标发生改变,后续进行set等其他操作可能会出错。为了避免这种错误,每一次使用这两个方法时都会把“前”一个元素位点记号标记为-1,此时直接进行其他操作会抛出异常,只用通过nextprevious方法更新标记之后才能正常使用其他操作。

ForEach

增强for循环,利用迭代器来遍历数组和Collection集合

语法
for(数据类型 :变量名 集合或数组名)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值